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

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


当前回答

截至2019年2月,. addeventlistener()目前还不能使用jQuery .trigger()或.change(),您可以使用Chrome或Firefox在下面测试它。

三种。addEventListener('input', function() { console.log('不叫吗? '); }) $ (' # txt) .val .trigger(“测试”)(“输入”); $ (' # txt) .trigger(“输入”); $ (' # txt) .change (); < script src = " https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js " > < /脚本> <input type="text" id="txt">

你必须使用. dispatchevent()来代替。

三种。addEventListener('input', function() { console.log(“它!”); }) $ (' # txt) .val(“是”) 三种。dispatchEvent(新事件(“输入”)); < script src = " https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js " > < /脚本> <input type="text" id="txt">

其他回答

您可以很容易地覆盖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);

一个有效的例子:这里

(注意,当val(new_val)被调用时,即使值没有实际改变,这也总是会触发变化。)

如果你想在值实际改变时才触发更改,使用这个:

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

从redsquare的出色建议来看,这非常有效:

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

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

您可以使用attr和val方法,然后触发更改:

$('.parent-form').find('input').each(function() {
    item = $(this);
    item.attr('value', '0622-03-22');
    item.val('01/01/01').trigger('change');
});

我知道这是一个旧线程,但对于其他人来说,上面的解决方案可能不如下面的好,而不是检查更改事件,检查输入事件。

$("#myInput").on("input", function() {
    // Print entered value in a div box
    $("#result").text($(this).val());
});

不,你可能需要在设置值后手动触发它:

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

or:

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