Функция event.preventDefault () не работает в IE

Ответов: 11


452 ов принято

в IE вы можете использовать

event.returnValue = false;

для достижения того же результата.

И чтобы не получить ошибку, вы можете проверить наличие prif (event.preventDefault) event.preventDefault (); По умолчанию:

event.preventDefault ? event.preventDefault() : (event.returnValue = false);

Вы можете комбинировать их с:

// preventDefault always works
$("mootoolsbutton").addEvent('click', function(event) {
 alert(typeof(event.preventDefault));
});

// preventDefault missing in IE
<button
  id="htmlbutton"
  onclick="alert(typeof(event.preventDefault));">
  button</button>

23

Если вы связываете событие через функцию addEvent mootools, ваш обработчик событий получит фиксированное (дополненное) событие, переданное в качестве параметра. Он всегда будет содержать e = $ .event.fix (e); метод.

Попробуйте эту скрипту, чтобы увидеть разницу в привязке событий. http://jsfiddle.net/pFqrY/8/

$('a').on('click', function(event) {
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
});

Для всех пользователей jQuery вы можете исправить событие, когда это необходимо. Скажем, что вы использовали HTML onclick = ".." и получили специальное событие IE, которое не имеет preventDefault (), просто используйте этот код, чтобы получить его.

preventDefault()

После этого e.preventDefault (); работает отлично.


11 ов

Я знаю, что это довольно старый пост, но я просто потратил некоторое время, пытаясь сделать эту работу в IE8.

Похоже, что есть некоторые отличия в версиях IE8, потому что решения, размещенные здесь и в других потоках, не работали для меня.

Предположим, что у нас есть этот код:

returnValue

В моем preventDefault()методе IE8 существует из-за jQuery, но не работает (возможно, из-за точки ниже), поэтому это не сработает.

Даже если я задал $('a').on('click', function(event) { event.returnValue = false; event.preventDefault(); }); свойство непосредственно false:

returnValue

Это также не сработает, потому что я просто установил некоторое свойство специального объекта события jQuery.

Только решение , которое работает для меня , чтобы установить свойство eventв глобальной переменной event , как это:

$('a').on('click', function(event) {
    if (window.event) {
        window.event.returnValue = false;
    }
    event.preventDefault();
});

Просто, чтобы облегчить для кого-то, кто попытается убедить IE8 работать. Надеюсь, что IE8 скоро умрет от мучительной смерти.

ОБНОВИТЬ:

Как указывает sv_in , вы можете использовать event.originalEventдля получения исходного объекта события и установки returnValueсвойства в исходном. Но я еще не тестировал его в своем IE8.


6

Mootools переопределяет preventDefault в объектах Event. Таким образом, ваш код должен работать нормально в каждом браузере. Если это не так, тогда возникает проблема с поддержкой ie8 в mootools.

Вы проверили свой код на ie6 и / или ie7?

Док говорит

Каждое событие, добавленное с помощью addEvent, автоматически получает метод mootools без необходимости вручную его экземпляра.

но в случае, если это не так, вы можете попробовать

new Event(event).preventDefault();

3
if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}

Проверено на IE 9 и Chrome.

JavaScript, интернет-исследователь, события, MooTools, preventdefault,
Похожие вопросы
Яндекс.Метрика