0

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

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

4

1 回答 1

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("");
    }
});
于 2013-07-16T09:42:56.657 回答