2

正如标题所示,我想将 show() 和 hide() jQuery 函数作为参数传递给另一个函数。

function applyActionOnClass(attr, action) {
    $('#salesonhold_table tr').each(function () {
    if ($(this).attr('status') == attr)
        $(this).action;
    });
}

这是我调用我的applyActionOnClass函数的时候:

$(document).on('change', '.checkboxes', function () {
    var attr = $(this).val();
    if ($(this).is(':checked'))
        applyActionOnClass(attr, show());
    else
        applyActionOnClass(attr, hide());
});

为了解释一下这样做的目的,我有一个表,每个表都有一个彼此<tr>不同的status属性。我在表格顶部有两个复选框,一个用于每个可能的status值,我想<tr>在触发复选框时隐藏/显示相应的值。

触发器和东西工作正常,但说到$(this).action;它说hide is not defined。知道我在那里做错了什么吗?

非常感谢 !

4

2 回答 2

4

您可以改为传递匿名函数(或委托)。此代码处理:

function applyActionOnClass(attr, func) {
    $('#salesonhold_table tr').each(function () {
    if ($(this).attr('status') == attr)
        func($(this));
    });
}

此代码将委托传递给:

$(document).on('change', '.checkboxes', function () {
    var attr = $(this).val();
    if ($(this).is(':checked'))
        applyActionOnClass(attr, function(e) { e.show(); });
    else
        applyActionOnClass(attr, function(e) { e.hide(); });
});
于 2012-05-15T10:18:58.247 回答
4

另一种解决方案是像这样改变你的功能

function applyActionOnClass(attr, action) {
    $('#salesonhold_table tr').each(function () {
    if ($(this).attr('status') == attr)
        $(this)[action]();
    });
}

注意$(this)[action]();你可以在这里看到它http://jsfiddle.net/t6rEE/作为概念证明(我尝试了hideshow

于 2012-05-15T10:27:35.417 回答