我想向使用ID的元素添加基本的點擊處理程序。通常我會使用jQuery,但我已經忘記了如何在香草js中做到這一點。如何在不使用jQuery的情況下添加點擊處理程序
什麼是做到這一點的最好辦法,而無需使用jQuery:
$("#myBasic").click(function(){
alert(「testString」);
});
我想向使用ID的元素添加基本的點擊處理程序。通常我會使用jQuery,但我已經忘記了如何在香草js中做到這一點。如何在不使用jQuery的情況下添加點擊處理程序
什麼是做到這一點的最好辦法,而無需使用jQuery:
$("#myBasic").click(function(){
alert(「testString」);
});
非常基本的方法是把一個函數分配給該on[event]
屬性的元素
document.getElementById("myBasic").onclick = function() {
alert("testString");
};
這具有非常廣泛的browswer支持,並且對於大多數基本案例很有用
有o還有事件處理功能,如.addEventListener(evt, fn, capture)
,但IE只在IE9中開始支持它。在此之前,您需要使用attachEvent(onevt, fn)
,它類似但不完全相同。
.attachEvent()
的主要問題在於它不會自動引用通過this
綁定處理程序的元素。但是有一些解決方法。
要創建一個相當瀏覽器兼容的解決方案,你可以做這樣的事情:
function addListener(elem, type, fn) {
if (elem.addEventListener) {
elem.addEventListener(type, fn, false);
} else if (elem.attachEvent) {
elem.attachEvent("on" + type, function() {
return fn.call(elem, window.event);
});
} else {
elem["on" + type] = fn;
}
}
而且你會這樣稱呼它:
var el = document.getElementById("myBasic");
addListener(el, "click", function(e) { alert(this.id); });
這應包括大多數情況下, ,但我會對.attachEvent
版本的內存泄漏有點擔心。
所有這些只處理綁定處理程序。爲了獲得一致的跨瀏覽器行爲,您可能需要爲event
對象準備一個修復程序。
最簡單的就是:
document.getElementById('myBasic').onclick = function() {
// do something
};
最正確的方法是:
var f = function() {
// do something
};
if(document.body.attachEvent)
document.getElementById('myBasic').attachEvent("onclick",f);
else
document.getElementById('myBasic').addEventListener("click",f);
爲什麼這是最正確的方法? – NimChimpsky
因爲它允許你附加多個處理程序,而重複分配給'onclick'會覆蓋舊的。第二個還包括瀏覽器兼容性,通過檢查使用哪種方法。 –
您可能想要測試'.addEventListener'而不是'.attachEvent',以便IE9 +將使用*「best」* *。 –
document.getElementById('myBasic').addEventListener("click",function(){alert("teststring")});
究竟是如何這個問題不明確?這是一個非常明確,簡潔的問題。停止關閉問題只是因爲他們對你的口味太過基本。 –
同意,@thomasruns。我發現這個問答有助於谷歌搜索「香草JavaScript添加點擊處理程序」,這正是我需要的。 –
我也發現這有幫助,因爲我有同樣的確切問題。 –