【问题标题】:simple code with plain js : addEventListener doesn't respond简单的 js 代码:addEventListener 没有响应
【发布时间】:2011-04-25 21:34:41
【问题描述】:


我只是想做一个测试,我习惯于使用 jQuery,但不是使用“普通”javascript,我试图绑定这个事件,但我没有从事件中得到答案,我只是创建了一个链接和一个脚本html代码中的标签,带有:

var li = document.getElementById('first');
li.addEventListener('onMouseover', function(){
警报('ok');
})

你能告诉我它有什么问题吗?我没有看到错误。
谢谢

【问题讨论】:

  • 试试mouseover,全部小写?
  • 谢谢,但我不知道为什么,代码没有响应。虽然它会以一个简单的 alert('ok') 响应,但 onmouseover 什么都没有……有什么想法吗?

标签: javascript addeventlistener


【解决方案1】:

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

您需要考虑的另一个问题是 IE 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');
};

【讨论】:

  • 谢谢,正如我在上一篇文章中所说,我收到了来自 Firebug 的错误,告诉我变量为“null”...我在 Mac - chrome 或 Safari 上,请执行你知道怎么解决吗?
  • @Paul:哪个变量? li?如果是这样,问题是文档中没有 ID 为 first 的元素。如果存在这样的元素,那么如果您的脚本在该元素出现在文档的 HTML 中之前正在运行,则该元素不会在脚本运行时创建。
  • 感谢您的回答,这一切都说得通,但它仍然不想要。你可以试试html编辑器吗?我刚刚使用了一个 div、一个链接和一个简单的鼠标悬停(我也尝试使用 addEventListener),但不会触发该事件:code 代码
  • @Paul:这正是我所描述的问题。您需要等到元素在文档中。您可以使用窗口的加载事件来执行此操作。例如:window.onload = function() { var lis = document.getElementById('first'); lis.onmouseover = function() { alert('yo'); }; };
  • 好吧!谢谢,大声笑,我不认为在 jQuery 中我会自动编写 document.ready 的东西,我忘了我们在 js 中也需要它。非常感谢!
【解决方案2】:

您可以将处理函数直接分配给 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

【讨论】:

  • 谢谢,但它仍然无法在我的电脑上运行!我复制了与 jsFiddle 上完全相同的代码,您可以尝试将其写在 html 页面中吗?
  • 哪个jsFiddle?另外,你用的是什么浏览器?请参阅element.addEventListener 文档中有关 IE 的说明。尽可能避免 addEventListener 是最简单的,因为那时您不必担心处理 IE。
  • 嗨,实际上都是 jsFiddle,firebug 告诉我变量是“null”(它向我显示了 addEventListener 的行),但是为什么呢?对于这两个例子,我得到了相同的结果......(我在 mac - chrome 或 Firefox)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2014-06-06
  • 2019-02-19
相关资源
最近更新 更多