jQuery: event.preventdefault не работает с Firefox (Mac и ПК) - PullRequest
4 голосов
/ 03 мая 2011

У меня есть бит jQuery, переключающий абзац после ссылки H3.Он работает в IE и Chrome на ПК и Safari и Chrome на Mac.В Firefox на обеих платформах нажатие на ссылку вообще ничего не делает?

<script type="text/javascript">
$(document).ready(function(){
$("#rightcolumn .article .collapse").hide();
$("#rightcolumn h3 a").click(function(){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; 
};
$(this).parent().next().toggle(400);
});
});
</script> 

Если я отключаю event.preventDefault ();раздел работает в Firefox, но, конечно, я получаю страницу, переходящую наверх, чего я не хочу.Что я могу сделать, чтобы он работал в Firefox?

Ответы [ 2 ]

16 голосов
/ 03 мая 2011

В вашей функции отсутствует объявление события. Также в качестве соглашения я вижу большинство примеров использования evt в качестве имени переменной.

$("#rightcolumn h3 a").click(function(evt)
{
   evt.preventDefault();
   $(this).parent().next().toggle(400);
}

Комментарий от T.J. Crowder относительно включения evt в функцию ()

Вам необходимо объявить параметр в обработчике кликов (событие не является глобальным, кроме как для IE и браузеров, которые отбрасывают кость на сайты, специфичные для IE.) И обратите внимание, что вам не нужен (или не нужен) тест для preventDefault. jQuery предоставляет его в браузерах, которые не предоставляют его изначально

Более подробное описание событий jQuery

1 голос
/ 30 ноября 2013

Вам необходимо указать параметр Event:

<script type="text/javascript">
$(document).ready(function(){
$("#rightcolumn .article .collapse").hide();
$("#rightcolumn h3 a").click(function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; 
};
$(this).parent().next().toggle(400);
});
});
</script>

На этот вопрос уже был дан ответ https://stackoverflow.com/a/17712808

Обратите внимание, как обработчик в документах показывает этот eventObject в качестве переданного ему параметра: http://api.jquery.com/click/

И обратите внимание, что у объекта Event есть метод protectDefault: http://api.jquery.com/category/events/event-object/

...