0

引数として渡された関数名を使用するにはどうすればよいですか。

例:

showError('container', 'id', '- message', 'show');
showError('container', 'id', '', 'hide');


function showError(container, id, msg, action)
{    
    if(action == 'show') {  
        $('#' + container).show();       
        $('#' + id).html(msg).show();
    }
    else {  
        $('#' + container).hide();       
        $('#' + id).html(msg).hide();
    }

}
4

3 に答える 3

3

obj.foo()本当に2ステップです。 obj.foo関数オブジェクトを返し、()がそれを実行します。 obj['foo']同じ関数オブジェクトを返すので、 a を追加し()て実行します。

obj['foo']と同じなのでobj.foo。そのプロパティの値が関数であっても。[]そのため、キー名として文字列を使用して、アクセサーでいつでも任意のプロパティにアクセスできます。

$('#' + container)[action]();
于 2012-08-01T18:07:36.913 に答える
2

一般的なケースでは、角かっこ表記が適切です。あなたの場合、以下を使用してくださいtoggle

function showError(container, id, msg, action)
{    
        $('#' + container).toggle(action === 'show');       
        $('#' + id).html(msg).toggle(action === 'show');
}

または(Bergiが示唆するように):

function showError(container, id, msg)
{    
        $('#' + container).toggle(!!msg);       
        $('#' + id).html(msg);
}

(これは、私自身の発明であるdouble-bangを使用しており、!!真または偽の値をブール値に変換します。)

于 2012-08-01T18:11:16.230 に答える
2

文字列でそれぞれのメソッドにアクセスするには、ブラケット表記を使用します。

function showError(container, id, msg, action) {    
    $('#' + container)[action]();       
    $('#' + id).html(msg)[action]();
}

ただし、あなたの方法は奇妙に見えます。アクションを 2 つの値に制限し、それを自動的に行うことをお勧めします。

function showError(container, id, msg) {
    var action = msg=='' ? 'hide' : 'show';
    $('#' + container)[action]();       
    $('#' + id).text(msg)[action]();
}
于 2012-08-01T18:07:41.193 に答える