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テーブルの上に2つのチェックボックスがあり、可能な値ごとに1つずつあり、チェックボックスがトリガーされたときに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/hide概念の証明として (そして私はとの両方を試しましたshow)

于 2012-05-15T10:27:35.417 に答える