Вот мой код 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).
Любая помощь?
Ответы:
в IE вы можете использовать
добиться того же результата.
И для того, чтобы не получить ошибку, вы можете проверить на наличие protectDefault:
Вы можете объединить два с:
источник
event.preventDefault ? event.preventDefault() : event.returnValue = false;
event.preventDefault();
перестал работать на меня в FireFox по какой-то причине, на ровном месте. Использовал код Морити, и он отлично работал. Спасибо ~$('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
Если вы связываете событие через функцию mEtools 'addEvent, ваш обработчик событий получит фиксированное (дополненное) событие, переданное в качестве параметра. Он всегда будет содержать метод warnDefault ().
Попробуйте эту скрипку, чтобы увидеть разницу в привязке событий. http://jsfiddle.net/pFqrY/8/
Для всех пользователей jQuery вы можете исправить событие при необходимости. Предположим, что вы использовали HTML onclick = ".." и получили специфичное для IE событие, в котором отсутствует функция protectDefault (), просто используйте этот код для его получения.
После этого e.preventDefault (); работает отлично.
источник
Я знаю, что это довольно старый пост, но я потратил некоторое время, пытаясь заставить это работать в IE8.
Похоже, что есть некоторые различия в версиях IE8, потому что решения, размещенные здесь и в других темах, не работают для меня.
Допустим, у нас есть этот код:
В моем IE8
preventDefault()
метод существует из-за jQuery, но не работает (вероятно, из-за пункта ниже), поэтому это не удастся.Даже если я установлю
returnValue
свойство прямо в false:Это также не сработает, потому что я просто установил некоторое свойство пользовательского объекта события jQuery.
Только решение , которое работает для меня, чтобы установить свойство
returnValue
в глобальной переменнойevent
, как это:Просто чтобы облегчить задачу тому, кто попытается убедить IE8 работать. Я надеюсь, что IE8 скоро ужасно умрет мучительной смертью.
ОБНОВИТЬ:
Как указывает sv_in , вы можете использовать,
event.originalEvent
чтобы получить оригинальный объект события и установитьreturnValue
свойство в исходном. Но я еще не проверял это в своем IE8.источник
event.originalEvent
. Больше информации: stackoverflow.com/a/16675056/22550Mootools переопределяет warnDefault в объектах Event. Так что ваш код должен нормально работать на любом браузере. Если это не так, значит, есть проблема с поддержкой ie8 в mootools.
Вы тестировали свой код на ie6 и / или ie7?
Док говорит
но если это не так, вы можете попробовать
источник
Проверено на IE 9 и Chrome.
источник
Чтобы отключить клавиатуру после IE9, используйте:
e.preventDefault();
Чтобы отключить обычную клавиатуру под IE7 / 8, используйте:
e.returnValue = false;
илиreturn false;
Если вы попытаетесь отключить сочетание клавиш (например, с помощью Ctrl
Ctrl+F
), вам нужно добавить следующие строки:Вот полный пример только для IE7 / 8:
Ссылка: Как отключить сочетания клавиш в IE7 / IE8
источник
Вот функция, которую я тестировал с jquery 1.3.2 и ночной сборкой 09-18-2009. Дайте мне знать ваши результаты с ним. С этой целью все отлично работает в Safari, FF, Opera на OSX. Он предназначен исключительно для исправления проблемной ошибки IE8 и может привести к непредвиденным результатам:
Использование:
источник
stop
метод раньше, и я не мог найти его в MSDN. Что оно делает?.stop()
выдает исключение, потому что его не существует. Любое исключение будет иметь желаемый эффект.e.preventDefault()
вызвать исключение, вы можете просто позвонить, потому что оно все равно вызовет исключение ...preventDefault
это широко распространенный стандарт; использование adhoc каждый раз, когда вы хотите быть совместимым со старыми версиями IE, обременительно, лучше использовать polyfill:Это изменит прототип события и добавит эту функцию, отличную особенность javascript / DOM в целом. Теперь вы можете использовать
e.preventDefault
без проблем.источник
return false
у вас слушатель должен работать во всех браузерах.источник
FWIW, если кто-нибудь еще вернется к этому вопросу, вы также можете проверить, что вы передаете в функцию-обработчик onKeyPress.
Я столкнулся с этой ошибкой, когда я по ошибке передал onKeyPress (this) вместо onKeyPress (событие).
Просто что-то еще, чтобы проверить.
источник
Мне помог метод с проверкой функции. Этот метод работает в IE8
источник