在Javascript中将属性附加到冒泡的事件对象

时间:2011-09-09 12:47:59

标签: javascript events event-bubbling

在Chrome / Firefox中,我可以将自定义属性附加到一个处理程序中的事件对象,并在同一事件的不同处理程序中读取它们,即使事件处理已冒泡。

我不能在IE中做同样的事情。事件冒泡时我的自定义属性丢失了。 你知道这有什么解决方案或解决方法吗?

以下是该问题的一个示例:

<div id="div1">
<input type="button" value="Foo" id="button1">
</div>

<script>

function attach(el, event, fn) {
  if (el.addEventListener) {
    el.addEventListener(event, fn);
  } else if (el.attachEvent) {
    el.attachEvent('on'+event, fn);
  }

}

attach(document.getElementById("button1"), 'click', function (event) {
event.abc = "done";
return true;
});

attach(document.getElementById("div1"), 'click', function (event) {
alert(event.abc);
return true;
});

</script>

1 个答案:

答案 0 :(得分:0)

根据我的测试,你不能在IE中添加属性到事件对象(经过IE8测试)。

尝试下一个代码:

attach(document.getElementById("button1"), 'click', function (ev) {
  //ev=ev||event;
  //ev.abc = "done";
  // next lines show you why you cannot save properties in event object
  var xx1=event;
  var xx2=event;
  alert(xx1===xx2); // // showed *false* in IE8, but expected *true*

  return true;
});

我不确定但是,当请求event对象时,IE8总是返回 new 对象,它包含与先前请求相同的属性/值。