Javascript 无论如何更改,如何将函数绑定到select
我想用javascript将函数绑定到select。我可以用onchange或.change()来完成。但是,如果更改以编程方式完成,则似乎不会触发my函数: e、 g 如果用户更改select值,并且在(a)情况下,触发器将工作。但是,第二个病例将不会被发现 如何进行绑定,以便它也能检测到案例(b)。尝试使用Javascript 无论如何更改,如何将函数绑定到select,javascript,jquery,Javascript,Jquery,我想用javascript将函数绑定到select。我可以用onchange或.change()来完成。但是,如果更改以编程方式完成,则似乎不会触发my函数: e、 g 如果用户更改select值,并且在(a)情况下,触发器将工作。但是,第二个病例将不会被发现 如何进行绑定,以便它也能检测到案例(b)。尝试使用.trigger(): 编辑: 按照@Rory McCrossan的提示,如果事件是select元素,则可以扩展val()函数来触发该事件 // Save old val var
.trigger()
:
编辑:
按照@Rory McCrossan
的提示,如果事件是select元素,则可以扩展val()函数来触发该事件
// Save old val
var oldVal = $.fn.val;
$.fn.val = function(value) {
// Execute parent val()
obj = oldVal.apply(this, arguments);
// If it is a select
if(Object.prototype.toString.apply(this.get(0)) == '[object HTMLSelectElement]') {
// Trigger the event
this.trigger("change");
}
return obj;
};
$(document).ready(function() {
jQuery('#selectId').val("v3");
});
这里有一个正在工作的方法本身不会触发更改事件。您可以做的最简单的事情就是在需要时手动触发它。然而,如果您确实希望它自动发生,您可以扩展select元素的valHook
setter:
$.valHooks.select.set = function(orig) {
return function(el) {
var result = orig.apply(this, arguments);
$(el).trigger('change');
return result;
};
}($.valHooks.select.set);
这似乎很有效。您只需使用原始钩子,并使用触发代码对其进行补充
演示:如果元素是
select
,则可以原型化jQueryval()
函数,以自动触发更改
事件。我个人只想使用选项A。bind to$(document)。onChange(“id”,callback)
它将起作用,[…]当用户提交对元素值的更改时,[…]将触发更改事件。[…]
因此,无论何时以编程方式更改值,您都需要自己触发事件。@RorymcCross无需修补prototype,因为select元素可以扩展valHook
。
// Save old val
var oldVal = $.fn.val;
$.fn.val = function(value) {
// Execute parent val()
obj = oldVal.apply(this, arguments);
// If it is a select
if(Object.prototype.toString.apply(this.get(0)) == '[object HTMLSelectElement]') {
// Trigger the event
this.trigger("change");
}
return obj;
};
$(document).ready(function() {
jQuery('#selectId').val("v3");
});
$.valHooks.select.set = function(orig) {
return function(el) {
var result = orig.apply(this, arguments);
$(el).trigger('change');
return result;
};
}($.valHooks.select.set);