Прикрепление свойств к всплывающему объекту события в Javascript

В 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 ответ

Согласно моему тесту вы не можете добавить свойство к объекту события в 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 всегда возвращает новый объект, который содержит те же свойства / значения, что и предыдущий запрошенный.

Другие вопросы по тегам