Event.preventDefault не работает в Firefox.

Я не уверен, почему, но по какой-то причине event.preventDefault() не работает в Firefox. Я использую его, чтобы заблокировать щелчок на ссылку повторно направить вас к a href и вместо того, чтобы запустить функцию щелчка. Разметка выглядит следующим образом:

JQuery:

$('.sub-list-click a').click(function() {
 event.preventDefault();

 var sub = $(this).parent("li").next(".sub, .homepage-sub");

 if (sub.css('display') == 'none') {

 $(".sub, .homepage-sub").slideUp();
 $(".sub, .homepage-sub").children("li").animate({
 opacity: "0"
 }, 10); 

 setTimeout(function() { 
 sub.slideDown(); 
 }, 200);
 setTimeout(function() {
 sub.children("li").animate({
 opacity: "1"
 }, 200); 
 }, 500); 

 } else {
 sub.slideUp();
 } 

 return false;
});

Он работает в любом другом браузере, который я тестировал, просто у Firefox, похоже, есть некоторые проблемы.

2 ответа

Вам нужно добавить событие в качестве параметра в обработчик функции щелчка следующим образом:

$(document).ready(function () {
 $('.sub-list-click a').click(function (event) {
 event.preventDefault();
 var sub = $(this).parent("li").next(".sub, .homepage-sub");

 if (sub.css('display') == 'none') {
 $(".sub, .homepage-sub").slideUp();
 $(".sub, .homepage-sub").children("li").animate({
 opacity: "0"
 }, 10);

 setTimeout(function () {
 sub.slideDown();
 }, 200);
 setTimeout(function () {
 sub.children("li").animate({
 opacity: "1"
 }, 200);
 }, 500);

 } else {
 sub.slideUp();
 }
 });
});

Также обратите внимание, что этот пример завернут внутри события document.ready (возможно, вы уже это сделали, но поскольку это не было очевидно, я добавлю это как примечание)

"Рабочий" пример здесь (который предотвращает следующие ссылки, а не какой-либо материал анимации): http://fiddle.jshell.net/79uuqmho/1/

Редактировать/Update: Причина, по которой это не работает в Firefox, заключается в том, что использование event.something дает вам событие, не определенную ошибку, которая останавливает выполнение вашего скрипта. Хром, с другой стороны, не дает этого исключения (вероятно, из-за того, что событие определено где-то в объекте window) и позволяет скрипту выполнить вниз, чтобы вернуть false; (это то же самое, что {event.preventDefault();/* AND */event.stopPropagation();}


используйте любой объект в ваших параметрах метода событий, то есть:

$('.sub-list-click a').click(function(e) {
 e.preventDefault();
 // other code
}

licensed under cc by-sa 3.0 with attribution.