如何在没有框架(javascript)的情况下将单击绑定到锚点
我知道这在jQuery或任何其他框架中都很容易做到,但这并不是重点。如何在纯javascript中“正确”绑定单击事件?我知道如何在线操作(我知道这很糟糕)如何在没有框架(javascript)的情况下将单击绑定到锚点,javascript,events,Javascript,Events,我知道这在jQuery或任何其他框架中都很容易做到,但这并不是重点。如何在纯javascript中“正确”绑定单击事件?我知道如何在线操作(我知道这很糟糕) 这会导致我的javascript在启用JS的浏览器中执行,而没有javascript的浏览器的链接会正常运行 现在,我如何以非内联的方式做同样的事情?这个问题的标准答案是关于怪癖模式:如果您只需要分配一个单击事件,您可以分配onclick: 如果您有身份证: myAnchor = document.getElementById("Anc
这会导致我的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 = .....
}
anchors=document.getElementsByTagName(“a”);
对于(var i=0;i
还有一个document.getElementsByClassName
来模拟jQuery的类选择器,但并非所有浏览器都支持它
如果可能需要在一个元素上分配多个事件,请使用@Jordan和@David Dorward显示的addEventListener
。基本方法是使用查找元素,然后使用侦听事件
在HTML中:
<a href="doc.html" id="some-id">click here</a>
也可以使用匿名函数:
document.getElementById('some-id').addEventListener('click', function(eventObj) {
// ...
});
给它一个ID,你应该能够:
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标记上的事件,还需要考虑更多内容
这是一种很好的跨浏览器方法
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);
});
你在那里做这件事的方式并不可怕。它当然有缺点,但与所有其他方法相比也有优点(不需要先加载文档,然后才能作为主要方法使用)。不要让自己被不引人注目的宣传所洗脑。这不是一个好方法,因为它依赖于函数toString实际返回函数体进行事件处理。这是不能保证的。请记住,IE不支持addEventListener
-您必须使用attachEvent
。IE自IE9起就拥有addEventListener。如果要为使用onClick
属性和addEventListener
函数有什么区别?哪个更好?我相信还有一个click
函数,你也可以做myAnchor.click=(event)=>…
?@LukeTO'Brien简言之:onClick属性可以被覆盖,而addEventListener可以多次用于绑定同一元素上的同一事件。请看下面这个漂亮的答案:
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 );
}
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);
});