Mi aplicación ha agregado dinámicamente menús desplegables. El usuario puede agregar tantos como sea necesario.
Tradicionalmente estaba usando el live()
método de jQuery para detectar cuándo se editó uno de estos menús desplegables change()
:
$('select[name^="income_type_"]').live('change', function() {
alert($(this).val());
});
A partir de jQuery 1.7, he actualizado esto a:
$('select[name^="income_type_"]').on('change', function() {
alert($(this).val());
});
Mirando los documentos, eso debería ser perfectamente válido (¿verdad?), Pero el controlador de eventos nunca se activa. Por supuesto, he confirmado que jQuery 1.7 está cargado y ejecutándose, etc. No hay errores en el registro de errores.
¿Qué estoy haciendo mal? ¡Gracias!
javascript
jquery
jquery-1.7
Jack
fuente
fuente
live
realidad lo está utilizando deon
todos modos, por lo que es posible que aún no se necesite volver a escribir el código heredado hastalive
que se elimine, lo que creo que es 1.9. Extracto de la fuente 1.7.1: por lolive: function( types, data, fn ) {jQuery( this.context ).on( types, this.selector, data, fn ); return this;}
tanto, si uno no está actualizando a una versión que ya nolive
existe, es posible que no se necesite una actualización inmediata para el código heredado. Para el nuevo código, por supuesto, el uso en suon()
lugar es el recomendado. Solo pensé que esta información podría ayudar a alguien más en algún momento.live
aon
.Respuestas:
La
on
documentación indica (en negrita;)):Equivalente a
.live()
sería algo así comoAunque es mejor si vincula el controlador de eventos lo más cerca posible de los elementos, es decir, de que un elemento esté más cerca en la jerarquía.
Actualización: al responder otra pregunta, descubrí que esto también se menciona en la
.live
documentación :fuente
bind
,live
ydelegate
llamen aon
..live
>.on
.on
sintaxis es más lógica, ya que el oyente está realmente conectado al selector que proporciona. Cuando se desencadena el evento, jQuery atraviesa el DOM y ejecuta controladores donde se especifica (delegación de evento simple)..live
sugirió que sucedió algo "mágico", y se dijo que adjuntaba controladores de eventos para "elementos futuros" que no era del todo cierto.Además de la respuesta seleccionada,
Puerto
jQuery.live
a jQuery 1.9+ mientras espera que su aplicación migre. Agregue esto a su archivo JavaScript.Nota: La función anterior no funcionará desde jQuery v3 como
this.selector
se elimine.O puede usar https://github.com/jquery/jquery-migrate
fuente
Acabo de encontrar una solución mejor que no implica la edición de código de terceros:
https://github.com/jquery/jquery-migrate/#readme
Instale el paquete jQuery Migrate NuGet en Visual Studio para solucionar todos los problemas de versiones. La próxima vez que Microsoft actualice sus discretos módulos de validación y AJAX, tal vez intente sin el script de migración nuevamente para ver si resolvieron el problema.
Como jQuery Migrate es mantenido por la Fundación jQuery, creo que este no es solo el mejor enfoque para las bibliotecas de terceros y también para recibir mensajes de advertencia para sus propias bibliotecas que detallen cómo actualizarlas.
fuente
Además de las respuestas seleccionadas,
Si usa Visual Studio , puede usar Regex Reemplazar .
En Edición> Buscar y reemplazar> Reemplazar en archivos
o Ctrl + Shift + H
En la ventana emergente Buscar y reemplazar, configure estos campos
Encuentra qué:
\$\((.*)\)\.live\((.*),
Reemplazar con:
$(document.body).on($2,$1,
En las opciones de búsqueda, marque "Usar expresiones regulares"
fuente
jquery verision xxxjs editor abierto, encontrar
jQuery.fn.extend
agregar código
Ejemplo: jquery-2.1.1.js -> línea 7469 (jQuery.fn.extend)
Vista de imágenes de ejemplo
fuente