JScript/JavaScript的參考文檔甚少,也不是很詳細,很多語(yǔ)法也是一知半解,今天在寫(xiě)事件函數時(shí)碰到了一個(gè)問(wèn)題,現討論如下。
眾所周知,在處理HTML元素的事件時(shí)可以有多種方法寫(xiě)代碼:
1、直接寫(xiě)在HTML元素的on???屬性中,如:
<INPUT TYPE="BUTTON" ONCLICK="alert(‘Clicked!‘)" VALUE="Click Me!"> 或
<INPUT TYPE="BUTTON" ONCLICK="alerter()" VALUE="Click Me!"> 這里alerter()是一個(gè)寫(xiě)好的JScript函數。
2、使用HTML元素對象的事件屬性,如:
<INPUT ID="button1" TYPE="BUTTON" VALUE="Click Me!">
<SCRIPT LANGUAGE="JavaScript">
button1.onclick = alerter
function alerter()
{
window.alert("You clicked the button!")
}
</SCRIPT> 3、使用<SCRIPT FOR>,如:
<INPUT ID="button1" TYPE="BUTTON" VALUE="Click Me!">
<SCRIPT FOR="button1" EVENT="onclick" LANGUAGE="JavaScript">
alert("You clicked the button!")
</SCRIPT>
4、使用attachEvent函數,如:
<INPUT ID="button1" TYPE="BUTTON" VALUE="Click Me!">
<SCRIPT LANGUAGE="JavaScript">
button1.attachEvent("onclick", alerter)
function alerter()
{
window.alert("You clicked the button!")
}
</SCRIPT> 常用的是第1、2種方法,但有些時(shí)候使用第2種方法還是比較合適,比如寫(xiě)body.onload時(shí),不一定方便把onLoad屬性寫(xiě)在<body>元素內。特別是ASP.Net中編寫(xiě)Web用戶(hù)控件(.ascx)時(shí),它并沒(méi)有<body>元素。于是我寫(xiě)了下面的腳本:
window
.onload=alert("Load!");很高興地發(fā)現它也能夠運行,也沒(méi)有出錯。但是很奇怪,它的下一條語(yǔ)句總是不會(huì )執行,比如接著(zhù)還有一條alert("Hi");打開(kāi)網(wǎng)頁(yè)后只會(huì )看到一個(gè)提示“Load!”的對話(huà)框,不會(huì )出現“Hi”。而且照理應該先出現“Hi”,再出現“Load”的。
原來(lái)按照方法2的寫(xiě)法,事件函數是不能帶參數的!只能寫(xiě)成window.onload=funcname;的形式,而如果想帶參數地調用一個(gè)或多個(gè)函數,可以把這些語(yǔ)句寫(xiě)到一個(gè)函數內。也可以寫(xiě)成:
window.onload=function(){alert("Load!");}; 這樣相當于產(chǎn)生一個(gè)匿名函數。而按原來(lái)的寫(xiě)法在window.onload語(yǔ)句時(shí)已經(jīng)錯了,自然不會(huì )再執行下面的語(yǔ)句了。
看來(lái)想問(wèn)題還是要謹慎,不能想當然。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。