Javascript 将jQuery更改作为参数传递

Javascript 将jQuery更改作为参数传递,javascript,jquery,Javascript,Jquery,我的应用程序中有很多地方需要执行JS函数,并将其绑定到一些jquery事件,如“更改”或“单击”。出于重构的目的,我想创建一个通用函数来帮助我实现这一点。以下是我最初的想法: function execute_and_track(trackEvent, action) { action(); trackEvent(function () { action(); }); } 我想这样使用它: execute_and_track($("#ddl_Test")

我的应用程序中有很多地方需要执行JS函数,并将其绑定到一些jquery事件,如“更改”或“单击”。出于重构的目的,我想创建一个通用函数来帮助我实现这一点。以下是我最初的想法:

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("");
    }
});