你可以做到這一點在像這樣POJS,這應該是跨瀏覽器兼容,並且不使用任何第三方庫。其他的優點是每個命名類的元素只有一個事件監聽器,它使用事件傳播。
Javacsript
/*jslint maxerr: 50, indent: 4, browser: true */
/*global alert */
(function() {
"use strict";
function addEvent(elem, event, fn) {
if (typeof elem === "string") {
elem = document.getElementById(elem);
}
function listenHandler(e) {
var ret = fn.apply(null, arguments);
if (ret === false) {
e.stopPropagation();
e.preventDefault();
}
return ret;
}
function attachHandler() {
window.event.target = window.event.srcElement;
var ret = fn.call(elem, window.event);
if (ret === false) {
window.event.returnValue = false;
window.event.cancelBubble = true;
}
return ret;
}
if (elem.addEventListener) {
elem.addEventListener(event, listenHandler, false);
} else {
elem.attachEvent("on" + event, attachHandler);
}
}
function whichElement(e) {
var target = e.target;
if (target.tagName === "A" && target.parentElement.tagName === "LI" && target.parentElement.parentElement.className === "list-class") {
alert("The " + target.firstChild.nodeValue + " Link has been clicked");
}
}
addEvent(document.body, "click", whichElement);
}());
在jsfiddle
如果你使用一些較新的/自定義HTML標記或XML,那麼你可能需要考慮tagName case sensitivity,並寫了下面幾點是一定的。
if (target.tagName.toUpperCase() === "A" && target.parentElement.tagName.toUpperCase() === "LI" && target.parentElement.parentElement.className === "list-class") {
jQuery的條款上面可以寫成
的Javascript
$(document).on('click', '.list-class>li>a', function (e) {
alert("The " + e.target.firstChild.nodeValue + " Link has been clicked");
});
在jsfiddle
jQuery中,他們稱這種。
爲什麼不使用jquery –
最簡單的方法就是給列表中的項目或鏈接他們自己的班級。有什麼特別的東西會使這個主意變得糟糕? –
http://stackoverflow.com/questions/1207939/adding-an-onclick-event-to-a-table-row – manas