我知道在jQuery或任何其他框架中很容易实现,但那并不是重点。我该如何使用纯javascript“适当地”绑定点击事件? 我知道如何在内联中执行它(我知道这很糟糕)
<a href="doc.html" onclick="myFunc(); return false">click here</a>
这会使我的JavaScript在启用JS的浏览器中执行,并使链接对于那些没有JavaScript的用户表现出正常行为?
现在,我如何以非内联方式做同样的事情?
我知道在jQuery或任何其他框架中很容易实现,但那并不是重点。我该如何使用纯javascript“适当地”绑定点击事件? 我知道如何在内联中执行它(我知道这很糟糕)
<a href="doc.html" onclick="myFunc(); return false">click here</a>
这会使我的JavaScript在启用JS的浏览器中执行,并使链接对于那些没有JavaScript的用户表现出正常行为?
现在,我如何以非内联方式做同样的事情?
onclick
属性来绑定:myAnchor = document.getElementById("Anchor");
myAnchor.onclick = function() { myFunc(); return false; }
你也可以遍历所有锚点:
anchors = document.getElementsByTagName("a");
for (var i = 0; i < anchors.length; i++) {
anchors[i].onclick = .....
}
还有一个document.getElementsByClassName
可以模拟jQuery的类选择器,但并非所有浏览器都支持。
如果可能需要在一个元素上分配多个事件,请使用@Jordan和@David Dorward展示的addEventListener
。
onClick
属性和 addEventListener
函数有什么区别?哪个更好?我相信还有一个 click
函数,所以你能否也做 myAnchor.click = (event) => ...
? - Luke T O'Brien基本方法是使用 document.getElementById()
查找元素,然后使用 addEventListener
监听事件。
在你的 HTML 中:
<a href="doc.html" id="some-id">click here</a>
在你的JavaScript代码中:
function myFunc(eventObj) {
// ...
}
var myElement = document.getElementById('some-id');
myElement.addEventListener('click', myFunc);
或者您可以使用匿名函数:
document.getElementById('some-id').addEventListener('click', function(eventObj) {
// ...
});
addEventListener
- 您必须使用attachEvent
。 - el.pescado - нет войне这是一种不错的跨浏览器方法
var on = (function(){
if ("addEventListener" in window) {
return function(target, type, listener){
target.addEventListener(type, listener, false);
};
}
else {
return function(object, sEvent, fpNotify){
object.attachEvent("on" + sEvent, function(){
fpNotify(window.event);
});
};
}
}());
on(document.getElementById("myAnchor"), "click", function(){
alert(this.href);
});
document.getElementById("the id").onclick = function{ ... }
你不必使用jQuery,但是你可以尝试一下John Resig流行的addEvent函数。
addevent(elem, "click",clickevent);
function addEvent ( obj, type, fn ) {
if ( obj.attachEvent ) {
obj["e"+type+fn] = fn;
obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
obj.attachEvent( "on"+type, obj[type+fn] );
} else
obj.addEventListener( type, fn, false );
}
在纯JavaScript中“正确”绑定HTML标签上的事件还有更多需要考虑的。
http://www.pagecolumn.com/javascript/bind_event_in_js_object.htm