6

我即将更新我的代码以使用addEventListener()仅写入 Javascript 中的元素属性。

在我这样做之前,我想验证一些事情。

  1. 我假设我不必调用removeEventListener(),如果我更新 DOM 并删除元素(通过.innerHTMLwrite)。

  2. addEventListener支持流行的现代浏览器 - IE9、Chrome、Firefox、Safari

  3. 现代浏览器上不会出现其他问题。

我问是因为我不想急于更新我的代码。

笔记:

属性与事件相关性(删除 on )。

  • onkeypress - 按键
  • onblur -> 模糊
  • onfocus -> 聚焦

研究

https://developer.mozilla.org/en/DOM/element.addEventListener(有兼容性图表)

http://www.quirksmode.org/js/events_advanced.html

有关的

JavaScript 侦听器,“按键”不检测退格?

笔记

  • 而不是返回false。用于preventDefault()阻止表单在输入时提交。
4

2 回答 2

4

1) 您不需要为此调用 removeEventListener,但如果您删除通过 addEventListener 附加到 eventListener 的 DOM 元素,则需要调用 removeEventListener ,如果您删除它的任何子元素,则不需要删除任何内容。

2) 所有主流浏览器都支持 addEventListener

3) 现代浏览器上没有其他与 addEventListener 相关的问题

4) onkeypress 不是事件名称而是属性,事件名称为keypress。其他名称相同*

避免使用 jQuery 以实现跨浏览器兼容性的快速代码:

Element.prototype.on = function(evt, fn) {
if (this.addEventListener)
    this.addEventListener(evt, fn, false);
else if (this.attachEvent)
    this.attachEvent('on' + evt, fn);
};

Element.prototype.off = function(evt, fn) {
    if (this.removeEventListener)
        this.removeEventListener(evt, fn, false);
    else if (this.detachEvent)
        this.detachEvent('on' + evt, fn);
};
于 2012-05-17T15:52:02.917 回答
3
  1. 你不必。如果您不存储对 DOM 元素的引用(例如在意外的全局变量中),垃圾收集器应该清理它。

  2. 那就是浏览器支持。对于较旧的 IE,有attachEvent()几乎相同的功能。

  3. 没有什么你应该担心的。这是现代的方式。

注意:你可能想使用jQuery来制作跨浏览器的东西。如果可能的话,它使用的引擎盖下addEventListener,可以回退到attachEvent旧的 IE 并且还标准化你的事件对象,所以你不必担心差异。它也非常适合 DOM 操作和遍历。

于 2012-05-17T15:55:06.500 回答