2011-05-08 9 views
32

me encontré con un montón de funciones como ésta:¿Cuándo debería usar return false en la función jquery?

$(function() { 
    $("body a").click(function() { 
     alert(this.innerHTML); 
     return false; 
    }); 
}); 

¿Cuál es la diferencia entre this y $(this) en jQuery?

Todos ellos tienen una línea return false; - No sé cuándo debo usar return false en la función jquery y no sé para qué sirve?

Respuesta

54

Según jQuery Events: Stop (Mis)Using Return False (enlace archivada), volviendo false realiza tres tareas cuando se le llama:

  1. event.preventDefault();
  2. event.stopPropagation();
  3. Detiene la ejecución de la devolución de llamada y regresa inmediatamente cuando se le llama.

La única acción necesaria para cancelar el comportamiento predeterminado es preventDefault(). Emitir return false; puede crear código frágil. Por lo general, te gustaría simplemente esto:

$("a").on('click', function (e) { 
    // e == our event data 
    e.preventDefault(); 
}); 

Y en segundo lugar "este" es un elemento DOM en javascript y "$ (this)" es un elemento jQuery que hace referencia al elemento DOM. Lea más sobre el tema en jQuery's this: demystified.

+0

1 para el enlace. Gracias. –

+0

+1 para el enlace maravilloso – diEcho

+0

Gracias por el enlace :) – Facedown

8

Está haciendo clic en un delimitador, cuyo comportamiento predeterminado es navegar en algún lugar. La devolución falsa puede ser un intento de evitar la navegación y mantener al usuario en la página/vista actual.

+0

+1 para enseñar con líneas simples y cortas – diEcho

2

En el alcance del controlador de clics, this es el elemento DOM desenvuelto. $(this) lo envuelve y devuelve un elemento jQuery. Es una práctica común ajustar esto una vez y ponerlo a disposición dentro del alcance como that, o con frecuencia $this (prefijando nombres de variables con $ es una convención para indicar un elemento jQuery).

Su ejemplo, por tanto, se podría escribir como

$(function() { 
    $("body a").click(function() { 
     var $this = $(this); 
     alert($this.html()); 
     return false; 
    }); 
}); 
Cuestiones relacionadas