btn是一個按鈕的節(jié)點名,那么btn.onclick="createa()";為什么不能再點擊按鈕時調(diào)用creata()函數(shù)呢?
// btn.onclick="createa()";
? ? ?btn.setAttribute("onclick", "createa()");
這兩行代碼為什么不是等價的?但是第二行代碼測試可行!
// btn.onclick="createa()";
? ? ?btn.setAttribute("onclick", "createa()");
這兩行代碼為什么不是等價的?但是第二行代碼測試可行!
2015-08-09
舉報
2015-10-09
是不是這個意思:對象.屬性=值;如果一個函數(shù)沒有返回值,是不能放在=右邊的,
2015-08-09
只能來自問自答了:
js是事件驅(qū)動的,一個節(jié)點可以發(fā)生很多種事件,包括click事件。在js中,當節(jié)點發(fā)生某一個事件時,可以為該事件綁定一個處理函數(shù)。也就是類似的
var btn=document.getElementById("myBtn")
btn.onclick?=?function(){createa(url,text)}
所要注意的是,這個節(jié)點的onclick屬性(有人爭議這是個事件,我也覺得應該是個事件),需要賦給一個函數(shù)類型的值(或者說應該給它綁定一個函數(shù)),才可以處理事件。
但是createa()并不是一個函數(shù),你可以說你定義了一個名叫createa的函數(shù),但createa()【也就是加了一對括號的createa】,是函數(shù)執(zhí)行了之后的結(jié)果,createa()是等價于createa這個函數(shù)的返回值的。在createa函數(shù)里,只是給body內(nèi)添加了一個a標簽,并沒有返回值,所以默認的結(jié)果就是undefined,也就是說非要給createa()確定一個值的話,把它打印出來就會顯示undefined。
那么如果寫成
btn.onclick?=createa();
實際上是等價于
btn.onclick?=?undefined;
顯然undefined是不能作為節(jié)點事件的處理函數(shù)的。
但是,也不是一定要加上function(){},你可以寫成這樣:
btn.onclick?=createa;
雖然createa()不是函數(shù),但createa卻是函數(shù),是可以作為節(jié)點事件的處理函數(shù)的,但是又因為這里定義的createa函數(shù)是需要兩個參數(shù)的,所以直接調(diào)用的話,會造成函數(shù)沒有參數(shù)傳入,產(chǎn)生undefined的結(jié)果,還在考慮ing,有興趣的同學可以回復我一起試驗。
2015-08-09