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>元素。 对于选择框,复选框和单选按钮,当用户使用鼠标进行选择时会当即触发该事件,可是对于其余元素类型,该事件将推迟到该元素失去焦点以前。

相关文章
相关标签/搜索