将jQuery更改作为参数传递

时间:2013-07-16 09:31:09

标签: javascript jquery

我的应用程序中有很多地方需要执行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("");
    }
});

不幸的是,这会引发错误:未捕获TypeError:对象[object global]没有方法' on'。看起来我无法将jquery更改作为参数传递。任何人都可以帮助我修复这个逻辑或建议另一种为这种重构创建泛型函数的方法吗?

1 个答案:

答案 0 :(得分:1)

如果我理解这个问题,我会改变方法。

尝试这个新的(作为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("");
    }
});