Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有框架(javascript)的情况下将单击绑定到锚点_Javascript_Events - Fatal编程技术网

如何在没有框架(javascript)的情况下将单击绑定到锚点

如何在没有框架(javascript)的情况下将单击绑定到锚点,javascript,events,Javascript,Events,我知道这在jQuery或任何其他框架中都很容易做到,但这并不是重点。如何在纯javascript中“正确”绑定单击事件?我知道如何在线操作(我知道这很糟糕) 这会导致我的javascript在启用JS的浏览器中执行,而没有javascript的浏览器的链接会正常运行 现在,我如何以非内联的方式做同样的事情?这个问题的标准答案是关于怪癖模式:如果您只需要分配一个单击事件,您可以分配onclick: 如果您有身份证: myAnchor = document.getElementById("Anc

我知道这在jQuery或任何其他框架中都很容易做到,但这并不是重点。如何在纯javascript中“正确”绑定单击事件?我知道如何在线操作(我知道这很糟糕)


这会导致我的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);
});