val()不會在jQuery中觸發change()

當我使用按鈕更改其值時,我試圖在文本框上觸發change事件,可是它不起做用。 檢查這個小提琴jquery

若是在文本框中鍵入內容,而後單擊其餘位置,則會觸發change 。 可是,若是單擊該按鈕,則文本框的值將被更改,但change不會觸發。 爲何? api


#1樓

經過將其替換爲原始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/ 代理


#2樓

僅當用戶鍵入輸入時onchange纔會觸發,而後輸入失去焦點。 code

設置值後,您可使用手動調用onchange事件: 事件

$("#mytext").change(); // someObject.onchange(); in standard JS

或者,您可使用如下方法觸發事件:

$("#mytext").trigger("change");

#3樓

不,您可能須要在設置值後手動觸發它:

$('#mytext').change();

要麼:

$('#mytext').trigger('change');

#4樓

看來事件並無冒泡。 嘗試這個:

$("#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')緣由。


#5樓

https://api.jquery.com/change/

change事件在其值更改時發送到元素。 此事件僅限於<input>元素, <textarea>框和<select>元素。 對於選擇框,複選框和單選按鈕,當用戶使用鼠標進行選擇時會當即觸發該事件,可是對於其餘元素類型,該事件將推遲到該元素失去焦點以前。

相關文章
相關標籤/搜索