val()不会在jQuery中触发change()

我试图在使用按钮更改其值时触发文本框上的change事件,但它不起作用。 检查这个小提琴。

如果您在文本框中键入内容并单击其他地方,则会触发change 。 但是,如果您单击该按钮,则文本框值会更改,但不会触发change 。 为什么?


onchange仅在用户键入输入时触发,然后输入失去焦点。

您可以在设置值后手动调用onchange事件:

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

或者,您可以使用以下方式触发事件:

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

从redsquare的优秀建议,这很好地工作:

$.fn.changeVal = function (v) {
    return this.val(v).trigger("change");
}

$("#my-input").changeVal("Tyrannosaurus Rex");

您可以非常轻松地覆盖val函数以通过将其替换为原始val函数的代理来触发更改。

只需在文档的某处添加此代码(加载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);

一个工作的例子:在这里

(请注意,即使值实际上没有changeval(new_val)被调用时,它也会始终触发change 。)

如果您只想在实际更改值时触发更改,请使用以下命令:

//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/

链接地址: http://www.djcxy.com/p/46177.html

上一篇: val() doesn't trigger change() in jQuery

下一篇: How do I get the name of an object's type in JavaScript?