sirve - preventdefault javascript w3schools
event.preventDefault() vs. return false(no jQuery) (3)
Diferencia entre preventDefault, stopPropogation, return false
Acción predeterminada: acción del lado del servidor cuando se produce un evento de control.
Supongamos que tenemos control div y dentro de él tenemos un botón. Entonces, div es el control principal del botón. Tenemos el clic del lado del cliente y el evento de clic del lado del servidor del botón. También tenemos un evento de clic del lado del cliente del div.
Al hacer clic en el evento del botón en el lado del cliente, podemos controlar las acciones del control principal y el código del lado del servidor utilizando las siguientes tres maneras:
return false
- Esto permite solo el evento del lado del cliente del control. El evento del lado del servidor y el evento del lado del cliente del control principal no se activan.preventDefault()
- Esto permite el evento de control del lado del cliente y su control principal. Servidor lado evento es decir. La acción predeterminada del control no se dispara.stopPropogation()
- Esto permite el lado del cliente así como el evento del lado del servidor del control. El evento del lado del cliente del control no está permitido.
Me preguntaba si event.preventDefault()
y return false
eran lo mismo.
He hecho algunas pruebas , y parece que
Si el controlador de eventos se agrega utilizando el modelo anterior, por ejemplo
elem.onclick = function(){ return false; };
Luego,
return false
evita la acción predeterminada, comoevent.preventDefault()
.Si el controlador de eventos se agrega usando
addEventListener
, por ejemploelem.addEventListener( ''click'', function(e){ return false; }, false );
Entonces,
return false
no evita la acción predeterminada.
¿Todos los navegadores se comportan así?
¿Hay más diferencias entre event.preventDefault()
y return false
?
¿Dónde puedo encontrar algo de documentación (no pude en MDN) acerca de return false
comportamiento return false
como event.preventDefault()
en algunos casos?
Mi pregunta es solo sobre JavaScript simple, no sobre jQuery, así que no lo marque como un duplicado de event.preventDefault () frente a return false , incluso si ambas preguntas tienen casi el mismo título.
La especificación de eventos del modelo de objetos de documento W3C en 1.3.1. Las interfaces de registro de eventos indican que handleEvent
en el handleEvent
no tiene valor de retorno:
handleEvent
SehandleEvent
este método cada vez que se produce un evento del tipo para el que se registró la interfaz EventListener. [...] Sin valor de retorno
bajo 1.2.4. Cancelación de evento el documento también establece que
La cancelación se realiza llamando al método preventDefault del evento. Si uno o más EventListeners llaman a preventDefault durante cualquier fase del flujo de eventos, la acción predeterminada se cancelará.
lo cual debería desalentarlo de usar cualquier efecto que devuelva verdadero / falso podría tener en cualquier navegador y usar event.preventDefault()
.
Actualizar
La especificación de HTML5 en realidad especifica cómo tratar un valor de retorno diferente. La sección 6.1.5.1 de las especificaciones HTML establece que
Si el valor de retorno es un valor falso booleano de WebIDL, cancele el evento.
para todo menos el evento "mouseover".
Conclusión
Todavía recomendaría usar event.preventDefault()
en la mayoría de los proyectos, ya que serás compatible con las especificaciones antiguas y, por lo tanto, con navegadores más antiguos. Solo si solo necesita admitir navegadores de vanguardia, devolver el falso para cancelar está bien.
return false
es solo para IE, event.preventDefault()
es compatible con Chrome, ff ... navegadores modernos