Эмуляция модели захвата события W3C в IE
Можно ли эмулировать захват событий в Internet Explorer?
Пример:
<a>one</a>
<a>two</a>
<a>three3</a>
<script>
var links = document.getElementsByTagName("A");
for (var i=0; i < links.length; i++) {
links[i].onclick = function(){
alert("clicked");
};
}
</script>
Я хочу, чтобы все эти события кликов не срабатывали. Я могу сделать это с помощью одного наблюдателя событий:
document.addEventListener("click", function(e) {
e.stopPropagation();
e.preventDefault();
}, true);
Как я могу сделать то же самое в IE? IE < 9 не поддерживает addEventListener
. Он поддерживает attachEvent
, но у него нет опции useCapture
.
Я нашел метод setCapture, но он не похож на модель захвата W3.
Ответы
Ответ 1
Как правило, вы не можете из-за порядок событий. В IE события начнут пузыряться из целевого элемента без фазы захвата, поэтому вы не сможете заранее их поймать.
Только одно, что вы можете сделать, и возможно только, если вы управляете обработчиками событий all.
Ответ 2
Проект Uniform Event Model из JavaScript Lab, похоже, эмулирует фазу захвата. Перейдите на страницу страницу загрузки библиотеки JSab DOM Correction и выберите все и выберите прокомментированный формат. Затем загрузите код и найдите его для слова "захват". Я не тестировал библиотеку или не читал большую часть своего кода.
Ответ 3
setCapture используется для сохранения некоторых действий, связанных с мышью, вне окна браузера.
и он используется для реализации какого-либо типа drag & drop
если вы mousedown элемент, и вы пойдете с указателем за окном браузера, событие mousemove перестанет работать
если setCapture() событие mousemove будет продолжать работать вне окна браузера
https://developer.mozilla.org/en/DOM/element.setCapture
и связанный с ним способ освобождения захвата
https://developer.mozilla.org/en/DOM/document.releaseCapture
поэтому он не имеет ничего общего с моделью захвата события
и нет никакого известного способа эмулировать его в Internet Explorer стандартным способом!
надеюсь, что это поможет!
Ответ 4
IE имеет метод Element.setCapture(), который может оказаться полезным http://msdn.microsoft.com/en-us/library/ms536742(v=vs.85).aspx Он позволяет маршрутизировать все события мыши на элемент который называется setCapture()
Ответ 5
function myFunction(e) {
if (!e) var e = window.object;//legacy event object
if (e.preventDefault) e.preventDefault();//prevent firing in W3C model
return false; //exit event, no firing, listener must registered to anchor tag
}
var x = document.getElementsByTagName("A");
if (x.item(0).addEventListener) {
for (var i = 0, l = x.length; i < l; i++) {
x.item(i).addEventListener("click",myFunction,false);
}
}//W3C model
else if (x.item(0).attachEvent) {
for (var i = 0, l = x.length; i < l; i++) {
x.item(i).attachEvent("onclick",myFunction);
}
}// legacy browsers
Ответ 6
Лучший способ, если вы используете только пузырьки для кликов:
if (document.addEventListener) document.addEventListener("click", function(e){e.preventDefault();},false);
else if (document.attachEvent) document.attachEvent("onclick", function(){window.event.returnValue = false;});