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