2012-10-08 74 views
3

我想向使用ID的元素添加基本的點擊處理程序。通常我會使用jQuery,但我已經忘記了如何在香草js中做到這一點。如何在不使用jQuery的情況下添加點擊處理程序

什麼是做到這一點的最好辦法,而無需使用jQuery:

$("#myBasic").click(function(){ 
    alert(「testString」); 
}); 
+9

究竟是如何這個問題不明確?這是一個非常明確,簡潔的問題。停止關閉問題只是因爲他們對你的口味太過基本。 –

+2

同意,@thomasruns。我發現這個問答有助於谷歌搜索「香草JavaScript添加點擊處理程序」,這正是我需要的。 –

+0

我也發現這有幫助,因爲我有同樣的確切問題。 –

回答

15

非常基本的方法是把一個函數分配給該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對象準備一個修復程序。

5

最簡單的就是:

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); 
+1

爲什麼這是最正確的方法? – NimChimpsky

+2

因爲它允許你附加多個處理程序,而重複分配給'onclick'會覆蓋舊的。第二個還包括瀏覽器兼容性,通過檢查使用哪種方法。 –

+1

您可能想要測試'.addEventListener'而不是'.attachEvent',以便IE9 +將使用*「best」* *。 –

3
document.getElementById('myBasic').addEventListener("click",function(){alert("teststring")}); 
相關問題