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

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

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

onchange仅在用户inputinput时触发,然后input失去焦点。

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

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

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

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

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

 $.fn.changeVal = function (v) { return $(this).val(v).trigger("change"); } $("#my-input").changeVal("Tyrannosaurus Rex"); 

您可以非常轻松地覆盖val函数来触发更改,将其replace为原始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)被调用时,即使该值实际上没有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/

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

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

要么:

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

你需要像这样链接方法:

 $('#input').val('test').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事件的值发生更改时,将change事件发送到元素。 此事件仅限于<input>元素, <textarea>框和<select>元素。 对于select框,checkbox和单选button,当用户使用鼠标进行select时,会立即触发事件,但对于其他元素types,事件将被推迟,直到元素失去焦点。