personalizados lanzar eventos evento event escuchadores create añadir javascript html

javascript - lanzar - ¿Cuál es el efecto de agregar ''devolver falso'' a un detector de eventos de clic?



javascript onclick or addeventlistener (13)

Muchas veces he visto enlaces como estos en páginas HTML:

<a href=''#'' onclick=''someFunc(3.1415926); return false;''>Click here !</a>

¿Cuál es el efecto de la return false allí?

Además, no suelo ver eso en los botones.

¿Está esto especificado en alguna parte? En alguna especificación en w3.org?


¿QUÉ "devuelve falso" REALMENTE HACE?

return false es en realidad hacer tres cosas muy separadas cuando lo llamas:

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

Consulte jquery-events-stop-misusing-return-false para obtener más información.

Por ejemplo :

Al hacer clic en este enlace, devolver falso cancelará el comportamiento predeterminado del navegador .

<a href=''#'' onclick=''someFunc(3.1415926); return false;''>Click here !</a>


Aquí hay una rutina más robusta para cancelar el comportamiento predeterminado y la propagación de eventos en todos los navegadores:

// Prevents event bubble up or any usage after this is called. eventCancel = function (e) { if (!e) if (window.event) e = window.event; else return; if (e.cancelBubble != null) e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); if (e.preventDefault) e.preventDefault(); if (window.event) e.returnValue = false; if (e.cancel != null) e.cancel = true; }

Un ejemplo de cómo se usaría esto en un controlador de eventos:

// Handles the click event for each tab Tabstrip.tabstripLinkElement_click = function (evt, context) { // Find the tabStrip element (we know it''s the parent element of this link) var tabstripElement = this.parentNode; Tabstrip.showTabByLink(tabstripElement, this); return eventCancel(evt); }


Creo que hace que el evento estándar no ocurra.

En su ejemplo, el navegador no intentará ir a #.


Devolver falso detendrá el hipervínculo que se sigue después de que se haya ejecutado el javascript. Esto es útil para javascript discreto que se degrada con gracia; por ejemplo, puede tener una imagen en miniatura que usa javascript para abrir una ventana emergente de la imagen de tamaño completo. Cuando se desactiva javascript o se hace clic con el botón central de la imagen (se abre en una nueva pestaña), esto ignora el evento onClick y simplemente abre la imagen como una imagen de tamaño normal normalmente.

Si no se especificara el retorno falso, la imagen abrirá la ventana emergente y abrirá la imagen normalmente. Algunas personas en lugar de usar el uso de false devuelve javascript como el atributo href, pero esto significa que cuando javascript está deshabilitado, el enlace no hará nada.


Devolver falso impedirá la navegación. De lo contrario, la ubicación se convertiría en el valor de retorno de someFunc


El return false evita que la página se desplace y que el desplazamiento no deseado de una ventana a la parte superior o inferior.

onclick="return false"


El uso de return false en un evento onclick impide que el navegador procese el resto de la pila de ejecución, que incluye seguir el enlace en el atributo href.

En otras palabras, al agregar return false, el href deja de funcionar. En tu ejemplo, esto es exactamente lo que quieres.

En los botones, no es necesario porque onclick es todo lo que ejecutará, no hay href para procesar y acceder.


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

No creo que exista una especificación W3C para esto. Todas las interfaces antiguas de JavaScript como esta han recibido el apodo de "DOM 0", y en su mayoría no están especificadas. Puede tener un poco de suerte al leer la documentación antigua de Netscape 2.

La forma moderna de lograr este efecto es llamar a event.preventDefault() , y esto se especifica en la especificación de eventos DOM 2 .



La <a href> se <a href> la acción predeterminada, que en el caso de <a href> es seguir el enlace. Cuando devuelva falso al onclick, entonces se ignorará el href.


Me sorprende que nadie mencione onmousedown lugar de onclick . los

onclick=''return false''

no mousedown comportamiento predeterminado del navegador, lo que da lugar a una selección de texto (a veces no deseada) que se produce en mousedown de mousedown pero

onmousedown=''return false''

hace.

En otras palabras, cuando hago clic en un botón, su texto a veces se selecciona accidentalmente cambiando el aspecto del botón, que puede no ser deseado. Ese es el comportamiento predeterminado que estamos tratando de prevenir aquí. Sin embargo, el evento mousedown se registra antes del click , por lo que si solo evita ese comportamiento dentro de su controlador de click , no afectará la selección no deseada que surja del evento mousedown . Así que el texto sigue siendo seleccionado. Sin embargo, la prevención de la configuración predeterminada para el evento mousedown hará el trabajo.

Vea también event.preventDefault () vs. return false


Puedes ver la diferencia con el siguiente ejemplo:

<a href="http://www.google.co.uk/" onclick="return (confirm(''Follow this link?''))">Google</a>

Al hacer clic en "Aceptar" se devuelve verdadero, y se sigue el enlace. Al hacer clic en "Cancelar" devuelve falso y no sigue el enlace. Si javascript está deshabilitado, el enlace se sigue normalmente.


Si se retorna falso de un evento de JavaScript, generalmente se cancela el comportamiento "predeterminado"; en el caso de los enlaces, le indica al navegador que no siga el enlace.