oK,所以我有一對夫婦,最終可能會出現這個論壇過於新手的問題,關於不引人注意的事件處理。事件處理問題(Javascript)
據我瞭解,正確建立文件將是這個樣子:
<html>
<head>
<title>Title</title>
<script src="jsfile.js" type="text/javascript></script>
</head>
<body>
//Body content, like some form elements in my case
</body>
</html>
Jsfile.js會是這個樣子:
function a() {
//code;
}
function b()...
window.addEventListener('load', a, false);
document.getElementById("id").addEventListener('click', b, false);
document.myForm.typeSel.addEventListener('change', c, false);
//or to use better browser-compatible code...
function addEvent(obj,evt,fn) {
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
addEvent(window, 'load', a);
addEvent(document.getElementById('id'), 'click', b);
addEvent(document.myForm.typeSel, 'change', c);
據我瞭解,同時,在瀏覽器的頭部加載這個javascript代碼,將每個事件處理程序添加到它們各自的元素中。但是...雖然窗口處理程序正確添加,其他人都沒有。但是,如果將放置在函數內,則訪問元素的(例如)getElementById方法工作得很好,並添加事件處理程序。所以我可以想象,通過window onload調用一個loadEvents()函數,該函數包含我需要事件處理程序的其他文檔元素的所有addEvent()函數。但據我瞭解,我不應該這樣做。
另外,如果我是粘在身體內的addEvent代碼與它解決的元素,如沿...
<input type="checkbox" id="test" />
<script type="text/javascript>
document.getElementById("test").onclick = func;
</script>
...然後正常工作。但它當然也違反了刪除內聯事件處理程序的全部原因!
所以問題的存在:爲了使用 「元素閱讀進度( '咔噠',FUNC,FALSE)」, 「的addEvent(元素, '點擊',FUNC)」,甚至是「元素 .onclick = func「 - 我怎樣才能成功地引用一個頭文件尾部的元素,而不必將它粘在的另一個函數中?爲什麼getElementById和其他類似的方法不能在頭部的函數之外工作?
或者,我的底層理解是否存在一些缺陷?
非常感謝。我有點kick然心動,沒有想到這一點。我甚至在我的addEvent()函數中發出警報,以查明通過參數發送了什麼對象,並發現它是「未定義的」。我應該從邏輯上理解它。好吧。 此外,感謝鏈接到雅虎頁面 - 我一直在尋找方法,以確保我編碼達到最高標準,如更新到不顯眼的JavaScript ......我之所以有這個麻煩的全部原因第一名! – David 2010-01-23 05:26:04
沒有必要踢自己:)對我來說,編程總是邏輯思維和試錯之間的混合物。我認爲對大多數人來說就是這樣,否則我們不會有這麼多的軟件測試框架。至於編碼達到最高標準......我不知道,知道你在做什麼以及爲什麼要這樣做肯定是件好事。但是,一個POV的高標準可能會被另一個人所詬病。 – 2010-01-23 12:51:09