當我使用按鈕更改其值時,我試圖在文本框上觸發change
事件,可是它不起做用。 檢查這個小提琴 。 jquery
若是在文本框中鍵入內容,而後單擊其餘位置,則會觸發change
。 可是,若是單擊該按鈕,則文本框的值將被更改,但change
不會觸發。 爲何? api
經過將其替換爲原始val
函數的代理,能夠很是輕鬆地覆蓋val
函數以觸發更改。 app
只需將此代碼添加到文檔中的某個位置(加載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);
工做示例: 這裏 this
(請注意,即便實際上未更改值,在調用val(new_val)
時,它始終會觸發change
。) spa
若是您只想在值實際更改時觸發更改,請使用如下命令: .net
//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);
實時示例: http : //jsfiddle.net/5fSmx/1/ 代理
僅當用戶鍵入輸入時onchange
纔會觸發,而後輸入失去焦點。 code
設置值後,您可使用手動調用onchange
事件: 事件
$("#mytext").change(); // someObject.onchange(); in standard JS
或者,您可使用如下方法觸發事件:
$("#mytext").trigger("change");
不,您可能須要在設置值後手動觸發它:
$('#mytext').change();
要麼:
$('#mytext').trigger('change');
看來事件並無冒泡。 嘗試這個:
$("#mybutton").click(function(){ var oldval=$("#mytext").val(); $("#mytext").val('Changed by button'); var newval=$("#mytext").val(); if (newval != oldval) { $("#mytext").trigger('change'); } });
我但願這有幫助。
我只嘗試了一個普通的舊$("#mytext").trigger('change')
而不保存舊值,即便值未更改, .change
觸發。 這就是爲何我保存之前的值並僅在其更改後才調用$("#mytext").trigger('change')
緣由。
從https://api.jquery.com/change/ :
change
事件在其值更改時發送到元素。 此事件僅限於<input>
元素, <textarea>
框和<select>
元素。 對於選擇框,複選框和單選按鈕,當用戶使用鼠標進行選擇時會當即觸發該事件,可是對於其餘元素類型,該事件將推遲到該元素失去焦點以前。