Прикрепление свойств к всплывающему объекту события в Javascript - PullRequest
3 голосов
/ 09 сентября 2011

В 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 голосов
/ 09 сентября 2011

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

...