“theform._eventtarget 為空或者不是對象”,解決辦法
當點擊按鈕(服務器控件按鈕)時,沒有反應了,點窗口左下角(狀態(tài)條)的黃嘆號,提示
theform._eventtarget 為空或者不是對象
很是奇怪,本來好好的,怎么突然變成這樣了。由于之前改了很多東西,也不記是動了哪里成了這樣了。
查看網(wǎng)頁的源碼(從瀏覽器右鍵中“查看源代碼”,不是aspx的源碼),可以看到aspx頁面生成的HTML與Javascript代碼,如下代碼值得關注;
<script type="text/javascript">
//<![CDATA[
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();
}
}
//]]>
</script>
_doPostBack方法太熟悉了,這是個曝光率很高的方法,不是在程序中曝光,是在網(wǎng)上,多次被人提到,這是服務器控件(到了客戶端后也只是普通HTML控件)調(diào)用服務器端方法的javascript指令。
在_doPostBack方法中,用到了theForm變量,這就是在錯誤提示中提到的“theForm.__EVENTTARGET”,它為空,噢,看看為什么;
thisForm從哪里來的呢?
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
theForm就是表單form1呀,我們知道幾乎在每個aspx頁面中,都會有一個,且唯一的一個form表單,<form id="form1" runat="server"> 它的id一般是from1;它是服務器控件。我們很少會改動它的。而現(xiàn)在,它找不到了,所以theForm變量才為空。
繼續(xù)查看
<form name="form1" method="post" action="index.aspx" id="form1">(這是服務器表單控件在客戶端的HTML代碼)
很顯然,form1是存在的呀,可為什么找不到呢,我搜索了一下"form1",結(jié)果,查出來兩個,呵呵。問題搞清楚了。
那一個form表單是用于搜索的,僅用于搜索框,它并不是報務器控件;但是它的id卻也叫form1(默認的,沒有改),這當然不行,就把它的id隨便改了一個。就OK 。問題解決。
這個問題并沒有給我?guī)硖嗾系K,只所以還拿出來說說,主要是說說解決思路。另外建議一下,就是除了服務器表單,其它的表單不要與這個form1表單重名;(服務器表單只能一個,而HTML表單卻可以有多個,這并不沖突)。
當然了,表單元素是不可以嵌套的,
<form name="form1" method="post" action="index.aspx" id="form1">
<form name="form2">
</form>
</form>
像上面這樣,是錯誤的。
浙公網(wǎng)安備 33010602011771號