2011-04-25 80 views
0


我只是想做一个测试,我习惯于在jQuery上工作,但不是“纯”的JavaScript,我试图绑定这个事件,我没有得到事件的答案,我只是在html代码中创建了一个链接和一个脚本标签,其中:简单的代码与普通的js:addEventListener没有响应

var li = document.getElementById('first');
li.addEventListener( '的onmouseover',函数(){
警报( 'OK');
})

能否请你告诉我什么是错呢?我没有看到这个错误。
感谢

+2

尝试'mouseover',全部小写? – Jason 2011-04-25 21:37:21

+0

您正在使用哪种浏览器? – neebz 2011-04-25 21:52:27

+0

谢谢,但我不知道为什么,代码没有回应。它回应一个简单的警报('好'),但没有与onmouseover ...任何想法? – Paul 2011-04-25 22:39:44

回答

1

第一,您需要删除addEventListener()的“on”部分。其次,事件名称必须全部小写。第三,你错过了第三个参数,布尔值指示是否在捕获阶段处理事件,而不是冒泡阶段(如果有疑问,请使用false)。

您需要考虑的另一个问题是,IE < = 8不支持addEventListener(),因此您需要使用专有的attachEvent()方法包含特定于IE的回退。

有了这一切,你的例子就变成:

var li = document.getElementById('first'); 
if (typeof li.addEventListener != "undefined") { 
    li.addEventListener('mouseover', function() { 
     alert('ok'); 
    }, false); 
} else if (typeof li.attachEvent != "undefined") { 
    li.attachEvent('onmouseover', function() { 
     alert('ok'); 
    }); 
} 

最简单的跨浏览器的解决方案是所谓的DOM0方法,使用元素的onmouseover财产。然而,这具有每个元素仅允许每个事件有一个事件监听器的缺点,因此可能容易被其他代码覆盖。

li.onmouseover = function() { 
    alert('ok'); 
}; 
+0

谢谢,正如我对上一篇文章说,我有一个来自Firebug的错误,告诉我,变量是“空”...我在Mac - 铬或Safari,你知道如何解决这个问题吗? – Paul 2011-04-26 12:46:15

+0

@Paul:哪个变量? 'li'?如果是这样,问题是文档中没有ID为“first”的元素。如果存在这样的元素,那么如果脚本在元素出现在文档的HTML中之前运行,那么元素将不会在脚本运行时创建。 – 2011-04-26 12:55:52

+0

感谢您的回答,所有这些都是有道理的,但它仍然不需要。你可以尝试在一个HTML编辑器?我刚刚使用了一个div,一个链接和一个简单的onmouseover(我也尝试过使用addEventListener),但事件不会被触发:代码

代码 – Paul 2011-04-26 17:44:49

1

您可以在DOM直接分配处理函数到所选元素的onmouseover属性:

var lis = document.getElementById('first'); 
lis.onmouseover = function() { 
    alert('yo'); 
}; 

上的jsfiddle:http://jsfiddle.net/entropo/YMGAy/

文档:

编辑:
这里实在是太使用addEventListener ...

li = document.getElementById('first'); 
li.addEventListener('mouseover', function(e) { 
    alert('ok'); 
}, false); 

http://jsfiddle.net/entropo/7FvZ7/
你失踪的最后一个参数addEventListener(为useCapture

+0

谢谢,但它仍然不起作用在我的电脑上!我复制了与jsFiddle完全相同的代码,你可以尝试将它写入html页面吗? – Paul 2011-04-25 22:36:55

+0

哪个jsFiddle?另外,你使用的是什么浏览器?在'element.addEventListener'文档中查看IE上的注释。如果可能,最简单的方法是避免使用addEventListener,因为您不必担心处理IE。 – entropo 2011-04-25 22:51:09

+0

嗨,这两个jsFiddle实际上,萤火虫告诉我变量是“null”(它显示了addEventListener行),但为什么?与这两个例子,我有相同的结果...(我在Mac - 铬或Firefox) – Paul 2011-04-26 12:43:09