È possibile sostituire facilmente la funzione val
per innescare il cambiamento sostituendolo con un proxy per la funzione originaria val
.
basta aggiungere questo codice da qualche parte nel documento (dopo aver caricato 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 esempio di lavoro: here
(Si noti che questo sarà sempre innescherà change
quando val(new_val)
viene chiamato anche se il valore didn 't in realtà cambiato.)
Se si desidera attivare la modifica SOLO quando il valore effettivamente modificato, utilizzare questo:
//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);
esempio vivo per questo: http://jsfiddle.net/5fSmx/1/
fonte
2014-05-13 15:46:34
possibile duplicato (http://stackoverflow.com/questions/ 2247386/jquery-textbox-valxxxx-not-causare-change-to-fire) –
Il titolo stesso ha risposto alla mia domanda. Confermato a ** [.change()] (https://api.jquery.com/change/) ** giallo "Nota: modifica del valore di un elemento di input utilizzando JavaScript, utilizzando ad esempio .val(), won" licenziare l'evento. " –