PreventDefault не будет работать в Firefox

Я пытаюсь предотвратить HREF от фактического открытия ссылки, но выполнить script. Я получил часть script, но кажется, что Firefox просто проигнорировал бы это:

$("#permalink a").click(function(id){
  $("#newPost").fadeToggle;
  event.preventDefault();
  var id = this.getAttribute('href');
  $("#newPostContent").load(id);
  $("#newPost").show("fast");
});

Может ли кто-нибудь предложить кросс-браузер script для предотвращения по умолчанию?

Ответы

Ответ 1

Стандартное решение для этого - return false из обработчика click(). return false является эквивалентом вызова preventDefault() и stopPropagation() события. preventDefault() достаточно для этой задачи, так что либо он, либо return false будет работать.

Проблема заключается в синтаксических ошибках и неверных параметрах. Я вижу:

  • fadeToggle не имеет круглых скобок;
  • параметр функции называется id, но вы вызываете event.preventDefault(); и
  • Вы угасаете сообщение, а затем сразу же показываете его? Это поставит в очередь две анимации, но не имеет большого смысла. Вы, вероятно, хотите объединить эти две вещи и load() рациональным образом.

Итак, это должно работать:

$("#permalink a").click(function(event) {
  $("#newPost").fadeToggle();
  var id = this.getAttribute('href');
  $("#newPostContent").load(id);
  $("#newPost").show("fast");
  return false;
});

Вы можете свободно заменить return false на event.preventDefault() в этом случае, но распространяющееся событие click() может или может вызвать другие проблемы в зависимости от того, какие у вас есть другие обработчики событий.

Ответ 2

Это всегда работает: Firefox нуждается в "обработчике событий", Chrome - нет. Таким образом, это работает во всех браузерах:

$('#id_obj').click(function(event) {   
     event.preventDefault(event);  
}

Ответ 3

            $("#permalink a").click(function(id){

должен быть

            $("#permalink a").click(function(event){

Тогда

var id=event.target;

предоставит вам объект, над которым вы работаете, а event.preventDefault() остановит действие по умолчанию.

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

Ответ 4

Вы должны просто иметь возможность return false;