如何使用作为参数传递的函数名称。
示例:
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();
}
}
答案 0 :(得分:3)
obj.foo()
真的是一个两步的事情。 obj.foo
返回一个函数对象,然后()
执行它。 obj['foo']
返回相同的函数对象,因此添加()
来执行它。
由于obj['foo']
与obj.foo
相同。即使该属性的值是一个函数。因此,您始终可以使用[]
访问者访问任何属性,并使用字符串作为键名。
$('#' + container)[action]();
答案 1 :(得分:2)
使用bracket notation通过字符串访问相应的方法:
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]();
}
答案 2 :(得分: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);
}
(它使用我自己的发明,双重爆炸!!
,它将truthy或falsy值转换为它们的布尔值。)