Si alguna vez está generando contenido de página de manera dinámica o cargando contenido a través de AJAX, el siguiente ejemplo es realmente el camino que debe seguir:
- Evita el doble enlace en el caso de que el script se cargue más de una vez, como en una solicitud AJAX.
- El enlace vive en el
bodydocumento, por lo que independientemente de los elementos que se agreguen, muevan, eliminen y vuelvan a agregar, todos los descendientes que bodycoincidan con el selector especificado conservarán el enlace adecuado.
El código:
var bind_to = ':input';
$(document.body).off('change', bind_to);
$(document.body).on('change keyup', bind_to, function(event) {
alert('something happened!');
});
¡Note por favor! Estoy utilizando $.on()y en $.off()lugar de otros métodos por varias razones:
$.live()y $.die()están en desuso y se han omitido en versiones más recientes de jQuery.
- Necesitaría definir una función separada (por lo tanto, saturar el alcance global) y pasar la función a ambos
$.change()y por $.keyup()separado, o pasar la misma declaración de función a cada función llamada; Duplicando la lógica ... Lo cual es absolutamente inaceptable.
- Si alguna vez se agregan elementos al DOM,
$.bind()no se vincula dinámicamente a los elementos a medida que se crean. Por lo tanto, si se vincula :inputy luego agrega una entrada al DOM, ese método de vinculación no se adjunta a la nueva entrada. Luego, necesitaría desvincular explícitamente y luego volver a vincular todos los elementos en el DOM (de lo contrario, terminará duplicando los enlaces). Este proceso deberá repetirse cada vez que se agregue una entrada al DOM.