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()真的是一个两步的事情。 obj.foo返回一个函数对象,然后()执行它。 obj['foo']返回相同的函数对象,所以添加一个()来执行它。

既然obj['foo']是一样的obj.foo。即使该属性的值是一个函数。因此,您始终可以使用访问器访问任何属性[],使用字符串作为键名。

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

使用括号表示法通过字符串访问相应的方法:

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

但是,您的方法看起来很奇怪。我建议将操作限制为两个值,并自动执行此操作:

function showError(container, id, msg) {
    var action = msg=='' ? 'hide' : 'show';
    $('#' + container)[action]();       
    $('#' + id).text(msg)[action]();
}
于 2012-08-01T18:07:41.193 回答
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 回答