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);
一个工作的例子:在这里
(请注意,即使值实际上没有change
当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/
链接地址: 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?