Puede reemplazar muy fácilmente la función val
para desencadenar el cambio reemplazándolo con un proxy para la función original val
.
sólo tiene que añadir este código en algún lugar de su documento (después de cargar jQuery)
(function($){
var originalVal = $.fn.val;
$.fn.val = function(){
var result =originalVal.apply(this,arguments);
if(arguments.length>0)
$(this).change(); // OR with custom event $(this).trigger('value-changed');
return result;
};
})(jQuery);
Un ejemplo de trabajo: here
(Tenga en cuenta que esto siempre se disparará change
cuando val(new_val)
se llama incluso si el valor didn 'en realidad cambiado.)
Si desea desencadenar el cambio SÓLO cuando el valor realmente cambió, utilice este:
//This will trigger "change" event when "val(new_val)" called
//with value different than the current one
(function($){
var originalVal = $.fn.val;
$.fn.val = function(){
var prev;
if(arguments.length>0){
prev = originalVal.apply(this,[]);
}
var result =originalVal.apply(this,arguments);
if(arguments.length>0 && prev!=originalVal.apply(this,[]))
$(this).change(); // OR with custom event $(this).trigger('value-changed')
return result;
};
})(jQuery);
ejemplo vivo de que: http://jsfiddle.net/5fSmx/1/
posible duplicado de (http://stackoverflow.com/questions/ 2247386/jquery-textbox-valxxxx-not-causing-change-to-fire) –
El título mismo respondió mi pregunta. Confirmado en ** [.change()] (https://api.jquery.com/change/) ** amarillo "Nota: Cambiando el valor de un elemento de entrada usando JavaScript, usando .val() por ejemplo, won ' t disparar el evento ". –