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.