Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当JavaScript函数的名称在函数中作为字符串传递时,如何执行该函数?_Javascript_Jquery_Function_Hide_Show - Fatal编程技术网

当JavaScript函数的名称在函数中作为字符串传递时,如何执行该函数?

当JavaScript函数的名称在函数中作为字符串传递时,如何执行该函数?,javascript,jquery,function,hide,show,Javascript,Jquery,Function,Hide,Show,如何使用作为参数传递的函数名 例如: showError('container', 'id', '- message', 'show'); showError('container', 'id', '', 'hide'); function showError(container, id, msg, action) { if(action == 'show') { $('#' + container).show(); $('#

如何使用作为参数传递的函数名

例如:

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();
    }

}
obj.foo实际上是一个两步走的东西。foo返回一个函数对象,然后执行它。obj['foo']返回相同的函数对象,因此添加一个来执行它

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

$('#' + container)[action]();
用于通过字符串访问相应的方法:

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]();
}
在一般情况下,括号表示法是好的。在您的情况下,请使用切换:

甚至正如Bergi所说:

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

它使用了我自己的发明,双重爆炸!!,将真实值或虚假值转换为布尔值的等效值。

请尝试eval@LosManos:-1。在链接之前,然后不要这样做。@Bergi:是吗?我试着说eval是一种选择,但不必写文本来解释它的优缺点。不过,其他答案要好得多——因此只有一条评论。
function showError(container, id, msg)
{    
        $('#' + container).toggle(!!msg);       
        $('#' + id).html(msg);
}