2012-06-25 23 views
39

Tengo haga clic en eventos creados de esta manera:de jQuery evento click

$('.dialogLink') 
    .click(function() { 
     dialog(this); 
     return false; 
    }); 

La todos tienen un "return false"

Puede alguien explicar lo que esto hace y si se necesita?

Respuesta

75

Cuando regresa false desde un controlador de eventos que impide la acción predeterminada para ese evento y detiene la propagación de eventos a través del DOM. Es decir, que es el equivalente de hacer esto:

$('.dialogLink') 
    .click(function (event) { 
     dialog(this); 
     event.preventDefault(); 
     event.stopPropagation(); 
}); 

Si '.dialogLink' es un elemento <a> entonces su acción predeterminada de clic es para navegar a la href. Devolver false desde el controlador de clic impide eso.

En cuanto a si es necesario en su caso, yo supongo que la respuesta es sí, porque desea mostrar un cuadro de diálogo en respuesta al clic en lugar de navegar. Si el elemento en el que ha insertado el controlador de clic no tiene una acción predeterminada al hacer clic (por ejemplo, normalmente no ocurre nada cuando hace clic en un div), entonces no necesita devolver falso porque no hay nada que cancelar.

Si usted quiere hacer algo en respuesta al clic, pero dejar que la navegación por defecto siguen a continuación, no return false.

Más información:

+0

¿Sería lo mismo si codificado en esos dos eventos en la función de diálogo? – Alan2

+1

Esas dos líneas no son eventos, son las llamadas a métodos de la 'event' objeto que se dará cuenta de que he añadido como parámetro a la función. jQuery establece ese parámetro para el objeto 'event' asociado con el evento que ocurra.Si pasó el objeto 'event' a la función' dialog() ', podría llamar a esos métodos, pero creo que es mucho más fácil de mantener si lo hace directamente donde lo he mostrado. Habiendo dicho eso, te recomiendo que te apegues al 'return false' que ya tienes: es más corto. – nnnnnn

+0

Como alguien que acaba de toparse con este problema y se tomó un poco darse cuenta de lo que estaba pasando, yo diría que llamar 'return false' no es tan claro como decir para prevenir Default y detener Propagation. – aug

3

El valor de retorno de un controlador de eventos determina si o no el comportamiento de navegador por defecto debería tener lugar también. En el caso de hacer clic en enlaces, esto estaría siguiendo el enlace, pero la diferencia es más notable en los controladores de envío de formularios, donde puede cancelar el envío de un formulario si el usuario ha cometido un error al ingresar la información.

No creo que hay una especificación del W3C para esto. Todas las antiguas interfaces de JavaScript como esta han recibido el sobrenombre "DOM 0", y en su mayoría no están especificadas. Puede tener algo de suerte leyendo la documentación anterior de Netscape 2.

La forma moderna de lograr este efecto es llamar al event.preventDefault(), y esto se especifica en el DOM 2 Events specification.

Así que la forma correcta sería:

$('.dialogLink') 
    .click(function (e) { 
     dialog(this); 
     e.preventDefault(); 
     e.stopPropagation(); // Stop bubbling up 
}); 
+0

Menciona la forma "moderna", pero si es la misma, no es mejor codificar la devolución falsa y guardar algunos bytes del script :-) – Alan2

+0

Si se trata de un controlador de eventos jQuery, puede estar seguro de que 'return false' Hacer el trabajo. – nnnnnn

+0

De acuerdo con @nnnnnn. –

0

El valor de retorno de un controlador de eventos determina si o no el comportamiento de navegador por defecto debería tener lugar también. En el caso de hacer clic en enlaces, esto estaría siguiendo el enlace, pero la diferencia es más notable en los controladores de envío de formularios, donde puede cancelar el envío de un formulario si el usuario ha cometido un error al ingresar la información.

Cuestiones relacionadas