Una diferencia que la gente encuentra al pasar de .live()
a .on()
es que los parámetros para .on()
son ligeramente diferentes cuando se vinculan eventos a elementos añadidos dinámicamente al DOM.
He aquí un ejemplo de la sintaxis que usamos para usar con el método .live()
:
$('button').live('click', doSomething);
function doSomething() {
// do something
}
Ahora con .live()
ser obsoleta en la versión 1.7 de jQuery y eliminado en la versión 1.9, debe utilizar el método .on()
. He aquí un ejemplo equivalente utilizando el método .on()
:
$(document).on('click', 'button', doSomething);
function doSomething() {
// do something
}
Tenga en cuenta que estamos llamando .on()
contra el documento más que el propio botón. Especificamos el selector para el elemento cuyos eventos estamos escuchando en el segundo parámetro.
En el ejemplo anterior, estoy llamando al .on()
en el documento; sin embargo, obtendrá un mejor rendimiento si usa un elemento más cercano a su selector. Cualquier elemento ancestro funcionará mientras exista en la página antes de llamar al .on()
.
Esto se explica here in the documentation pero es bastante fácil perderse.
Solo me pregunto, si este es el punto por qué no mejoraron el método en vivo en lugar de crear un nuevo método de encendido. A menos que haya algo en vivo, ¿qué puede hacer, pero no en? – neobie
@neobie, es para que su código sea más significativo, y tiene uniformidad –
@neobie: Imagino que es para mantener la compatibilidad con versiones anteriores. Las diferencias señaladas en esta respuesta muestran cómo su comportamiento es ligeramente diferente. Si 'live()' se modificó para tener el comportamiento de 'on()', podría romper el código existente. La gente de jQuery ha demostrado que no tienen necesariamente miedo de "romper" el código heredado, pero supongo que en este caso, decidieron que tenía sentido no arriesgarse a introducir regresiones. – rinogo