Javascript 将jQuery更改作为参数传递
我的应用程序中有很多地方需要执行JS函数,并将其绑定到一些jquery事件,如“更改”或“单击”。出于重构的目的,我想创建一个通用函数来帮助我实现这一点。以下是我最初的想法:Javascript 将jQuery更改作为参数传递,javascript,jquery,Javascript,Jquery,我的应用程序中有很多地方需要执行JS函数,并将其绑定到一些jquery事件,如“更改”或“单击”。出于重构的目的,我想创建一个通用函数来帮助我实现这一点。以下是我最初的想法: function execute_and_track(trackEvent, action) { action(); trackEvent(function () { action(); }); } 我想这样使用它: execute_and_track($("#ddl_Test")
function execute_and_track(trackEvent, action) {
action();
trackEvent(function () {
action();
});
}
我想这样使用它:
execute_and_track($("#ddl_Test").change, function () {
if ($("#ddl_Test").val().toUpperCase() == "OTHER") {
document.getElementById("txt_Test").style.display = "inline";
}
else {
document.getElementById("txt_Test").style.display = "none";
$("#txt_Test").val("");
}
});
不幸的是,这引发了一个错误:uncaughttypeerror:Object[Object global]没有方法“on”。看起来我无法将jquery更改作为参数传递。有谁能帮我修正这个逻辑,或者为这种重构提出另一种创建泛型函数的方法吗?如果我理解这个问题,我会改变方法 试试这个新的(作为jquery插件)
是的,在这里使用jquery插件是个好主意。它很好用。谢谢
$.fn.execute_and_track = function(eventName, func) {
this.each(function() {
func.call(this); // fix the scope
$(this).on(eventName,func);
});
return this;
}
$("#ddl_Test").execute_and_track('change', function() {
if ($(this).val().toUpperCase() == "OTHER") {
this.style.display = "inline";
}
else {
this.style.display = "none";
$(this).val("");
}
});