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

Ниже приведен мой код JavaScript (mootools):

$('orderNowForm').addEvent('submit', function (event) {
    event.preventDefault();
    allFilled = false;
    $$(".required").each(function (inp) {
        if (inp.getValue() != '') {
            allFilled = true;
        }
    });

    if (!allFilled) {
        $$(".errormsg").setStyle('display', '');
        return;
    } else {
        $$('.defaultText').each(function (input) {
            if (input.getValue() == input.getAttribute('title')) {
                input.setAttribute('value', '');
            }
        });
    }

    this.send({
        onSuccess: function () {
            $('page_1_table').setStyle('display', 'none');
            $('page_2_table').setStyle('display', 'none');
            $('page_3_table').setStyle('display', '');
        }
    });
});

Во всех браузерах, кроме IE, это работает отлично. Но в IE это вызывает ошибку. У меня IE8, поэтому, используя его отладчик JavaScript, я узнал, что у eventобъекта нет preventDefaultметода, вызывающего ошибку, и поэтому форма отправляется. Метод поддерживается в случае Firefox (который я узнал с помощью Firebug).

Любая помощь?

javascript,internet-explorer,events,mootools,preventdefault,

192

Ответов: 11


452 ов принято

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

event.returnValue = false;

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

И для того , чтобы не получить ошибку, вы можете проверить существование рг , если ( событие . PreventDefault ) событий . 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 = $ . событие . 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, но не работает (возможно, из-за точки ниже), поэтому это не сработает.

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

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,