¿Hay alguna diferencia entre el siguiente código?
$('#whatever').on('click', function() {
/* your code here */
});
y
$('#whatever').click(function() {
/* your code here */
});
Creo que la diferencia está en los patrones de uso.
Preferiría .on
hacerlo .click
porque el primero puede usar menos memoria y trabajar para elementos agregados dinámicamente.
Considere el siguiente html:
<html>
<button id="add">Add new</button>
<div id="container">
<button class="alert">alert!</button>
</div>
</html>
donde agregamos nuevos botones a través de
$("button#add").click(function() {
var html = "<button class='alert'>Alert!</button>";
$("button.alert:last").parent().append(html);
});
y quiero "¡Alerta!" para mostrar una alerta. Podemos usar "clic" o "encendido" para eso.
click
$("button.alert").click(function() {
alert(1);
});
con lo anterior, se crea un controlador separado para cada elemento que coincida con el selector. Eso significa
.on
$("div#container").on('click', 'button.alert', function() {
alert(1);
});
con lo anterior, un único controlador para todos los elementos que coinciden con su selector, incluidos los creados dinámicamente.
.on
Como Adrien comentó a continuación, otra razón para usar .on
es eventos con espacios de nombres.
Si agrega un controlador .on("click", handler)
normalmente lo elimina con el .off("click", handler)
cual eliminará ese mismo controlador. Obviamente, esto funciona solo si tiene una referencia a la función, entonces, ¿qué sucede si no la tiene? Utiliza espacios de nombres:
$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });
con desvinculación a través de
$("#element").off("click.someNamespace");
on('click' ...)
, consulte stackoverflow.com/a/3973060/759452, es decir.on('click.darkenallothersections' ...)
y al mismo tiempo tengoon('click.displaynextstep' ...)
, entonces puedo desatar solo el que elijo usar.unbind('click.displaynextstep')
on()
es la tendencia en jQuery. Tuve que actualizar$(window).load(function() {});
a$(window).on("load", function (e) {})
cuando actualicé a jQuery 3.No, no hay diferencia funcional entre los dos ejemplos de código en su pregunta.
.click(fn)
es un "método de acceso directo" para.on("click", fn)
. De la documentación para.on()
:Tenga en cuenta que
.on()
difiere de.click()
que tiene la capacidad de crear controladores de eventos delegados al pasar unselector
parámetro, mientras.click()
que no. Cuando.on()
se llama sin unselector
parámetro, se comporta exactamente igual que.click()
. Si desea delegar eventos, use.on()
.fuente
selector
parámetro. Si llama.on()
sin unselector
parámetro, no hay mejora en el rendimiento sobre el uso.click()
..on()
es la forma recomendada de hacer todo su enlace de eventos a partir de jQuery 1.7. Enrolla toda la funcionalidad de ambos.bind()
y.live()
en una sola función que altera el comportamiento a medida que le pasa diferentes parámetros.Como ha escrito su ejemplo, no hay diferencia entre los dos. Ambos vinculan un controlador al
click
evento de#whatever
.on()
ofrece flexibilidad adicional para permitirle delegar eventos disparados por hijos de#whatever
a una sola función de controlador, si lo desea.fuente
.live()
hace? Además, esto parece contradecirse con las otras respuestas que dicen que solo tiene la funcionalidad de.click()
y, por lo tanto, no se aplica a eventos futuros..on()
puede hacer lo que.click()
hace y hacer qué.bind()
y.live()
hacer, depende de los parámetros con los que lo llame. (Algunas otras respuestas también mencionaron esto). Tenga en cuenta que "Vincular a todos los enlaces dentro de #whatever" no es lo que.live()
hace, es lo que.delegate()
hace..live()
se une a todo el interior endocument
lugar de permitirle especificar el contenedor. Note también.live()
está en desuso desde jQuery 1.7 en adelante.Como se menciona en las otras respuestas:
Sin embargo, teniendo en cuenta que
.on()
admite varias otras combinaciones de parámetros que.click()
no, lo que le permite manejar la delegación de eventos (supercediendo.delegate()
y.live()
).(Y, obviamente, hay otros métodos de acceso directo similares para "keyup", "focus", etc.)
La razón por la que publico una respuesta adicional es para mencionar lo que sucede si llama
.click()
sin parámetros:Teniendo en cuenta que si lo usa
.trigger()
directamente, también puede pasar parámetros adicionales o un objeto de evento jQuery, con el que no puede hacerlo.click()
.También quería mencionar que si observa el código fuente de jQuery (en jquery-1.7.1.js) verá que internamente la función
.click()
(o.keyup()
, etc.) realmente llamará a.on()
o.trigger()
. Obviamente, esto significa que puede estar seguro de que realmente tienen el mismo resultado, pero también significa que el uso.click()
tiene un poco más de sobrecarga: no hay nada de qué preocuparse o incluso pensar en la mayoría de las circunstancias, pero en teoría podría importar en circunstancias extraordinarias.EDITAR: Finalmente, tenga en cuenta que le
.on()
permite vincular varios eventos a la misma función en una línea, por ejemplo:fuente
.click()
.)No, no hay
El punto
on()
es sus otras sobrecargas y la capacidad de manejar eventos que no tienen métodos de acceso directo.fuente
Parecen ser lo mismo ... Documentación de la función click () :
Documentación de la función on () :
fuente
.click
vs.on
.click
Los eventos solo funcionan cuando el elemento se procesa y solo se adjuntan a los elementos cargados cuando el DOM está listo..on
los eventos se adjuntan dinámicamente a elementos DOM, lo que es útil cuando desea adjuntar un evento a elementos DOM que se representan en una solicitud ajax o algo más (después de que el DOM esté listo).fuente
Aquí obtendrá una lista de las diferentes formas de aplicar el evento click. Puede seleccionar en consecuencia como suaitable o si su clic no funciona, pruebe con una alternativa.
fuente
Ahora han desaprobado click (), por lo que es mejor ir con ('click')
fuente
En cuanto a ilearned de internet y algunos amigos .on () se usa cuando agrega elementos dinámicamente. Pero cuando lo usé en una página de inicio de sesión simple donde el evento click debería enviar AJAX a node.js y al regresar agregar nuevos elementos, comenzó a llamar a llamadas multi-AJAX. Cuando lo cambié para hacer clic () todo salió bien. En realidad no me he enfrentado a este problema antes.
fuente
NUEVOS ELEMENTOS
Como anexo a las respuestas completas anteriores para resaltar puntos críticos si desea que el clic se adjunte a nuevos elementos:
fuente
$(document).on('click','.UPDATE',function(){ });
funciona efectivamente como los mismos datos recuperados utilizando jquery. el botón no funciona en el momento de la actualización o eliminación:fuente