Estoy tratando de evitar que A HREF realmente abra el enlace, pero ejecutar un script. Obtuve la parte del script funcionando, pero parece que Firefox simplemente ignoraría esto:

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

¿Alguien puede sugerir una secuencia de comandos entre navegadores para evitar los valores predeterminados?

19
Tomer Lichtash 2 sep. 2009 a las 15:40

4 respuestas

La mejor respuesta

La solución estándar para esto es return false desde el controlador click(). return false es el equivalente de llamar a preventDefault() y stopPropagation() en el evento. preventDefault() también es suficiente para esta tarea, por lo que o return false funcionarán.

Su problema parece ser errores de sintaxis y parámetros mal nombrados. Veo:

  • fadeToggle no tiene paréntesis;
  • el parámetro de función se llama id pero usted llama event.preventDefault(); y
  • ¿Estás desvaneciendo la publicación e inmediatamente la estás mostrando? Eso pondrá en cola dos animaciones pero no tiene mucho sentido. Probablemente desee encadenar esas dos cosas y las load() de manera racional.

Entonces esto debería funcionar:

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

Puede reemplazar libremente return false con event.preventDefault() en este caso, pero el evento de propagación click() puede o puede causar otros problemas dependiendo de los otros controladores de eventos que tenga.

29
cletus 5 feb. 2010 a las 02:51

Simplemente deberías poder return false;

-1
Steerpike 2 sep. 2009 a las 11:43
            $("#permalink a").click(function(id){

Debe ser

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

Entonces

var id=event.target;

Le dará el objeto en el que está trabajando, y event.preventDefault () detendrá la acción predeterminada.

Típicamente devuelvo falso; yo mismo, pero esto evita que la acción predeterminada y detenga la propagación del evento, lo que podría tener efectos que no esperaba con otros controladores de eventos.

14
Brian Webster 30 oct. 2012 a las 17:08

Esto siempre funciona: Firefox necesita el "controlador de eventos", Chrome no. Entonces esto funciona en todos los navegadores:

$('#id_obj').click(function(event) {   
     event.preventDefault(event);  
}
20
Brian Webster 30 oct. 2012 a las 17:09