“theform._eventtarget 為空或者不是物件”,解決辦法

iDotNetSpace發表於2008-09-08

當點選按鈕(伺服器控制元件按鈕)時,沒有反應了,點視窗左下角(狀態條)的黃歎號,提示

theform._eventtarget 為空或者不是物件

 

很是奇怪,本來好好的,怎麼突然變成這樣了。由於之前改了很多東西,也不記是動了哪裡成了這樣了。

檢視網頁的原始碼(從瀏覽器右鍵中“檢視原始碼”,不是aspx的原始碼),可以看到aspx頁面生成的HTML與Javascript程式碼,如下程式碼值得關注;


//var theForm. = document.forms['form1'];
if (!theForm) {
    theForm. = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>

_doPostBack方法太熟悉了,這是個曝光率很高的方法,不是在程式中曝光,是在網上,多次被人提到,這是伺服器控制元件(到了客戶端後也只是普通HTML控制元件)呼叫伺服器端方法的javascript指令。

在_doPostBack方法中,用到了theForm變數,這就是在錯誤提示中提到的“theForm.__EVENTTARGET”,它為空,噢,看看為什麼;

 

thisForm從哪裡來的呢?
var theForm. = document.forms['form1'];
if (!theForm) {
    theForm. = document.form1;
}

 

theForm就是表單form1呀,我們知道幾乎在每個aspx頁面中,都會有一個,且唯一的一個form表單 它的id一般是from1;它是伺服器控制元件。我們很少會改動它的。而現在,它找不到了,所以theForm變數才為空。

 

繼續檢視
(這是伺服器表單控制元件在客戶端的HTML程式碼)

 

很顯然,form1是存在的呀,可為什麼找不到呢,我搜尋了一下"form1",結果,查出來兩個,呵呵。問題搞清楚了。

那一個form表單是用於搜尋的,僅用於搜尋框,它並不是報務器控制元件;但是它的id卻也叫form1(預設的,沒有改),這當然不行,就把它的id隨便改了一個。就OK 。問題解決。

 

這個問題並沒有給我帶來太多障礙,只所以還拿出來說說,主要是說說解決思路。另外建議一下,就是除了伺服器表單,其它的表單不要與這個form1表單重名;(伺服器表單只能一個,而HTML表單卻可以有多個,這並不衝突)。

當然了,表單元素是不可以巢狀的,




像上面這樣,是錯誤的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-442342/,如需轉載,請註明出處,否則將追究法律責任。

相關文章