jQuery从字符串调用函数

Aak*_*thy 43 javascript string methods jquery function

是否可以通过使用字符串调用函数?

(即)我有一个变量var target = 'next';.使用此字符串我想调用jquery方法next().我应该使用target + '()'(这有点愚蠢)来打电话next()吗?

我知道可以使用conditional语句来完成.因为它是一个从用户那里得到的字符串,但很难为所有这些使用条件语句.

在我的jQuery插件,用户将通过价值prev,siblings等等作为选项,使得相应的jQuery方法将被执行.

我该如何实现?

Gum*_*mbo 108

您可以使用括号表示法来访问包含标识符的字符串的成员:

var target = 'next';
$("foobar")[target]();    // identical to $("foobar").next()
Run Code Online (Sandbox Code Playgroud)

  • 哇,不知道这一个!这真的减少了我的代码行! (4认同)
  • 如果您知道可以使用`MyObject.call(myFunctionName,args);`函数式编程FTW调用方法,这非常有用.感谢小费,Gumbo. (2认同)

ibl*_*ish 14

如果你想使用jQuery,答案非常优雅.因为jQuery是一个对象(可以像数组一样访问) - 你可以使用$("selector")[target]().

例子:

var target = 'next';
jQuery("selector")[target]();
Run Code Online (Sandbox Code Playgroud)

如果您知道可以信任输入,这将有效.但是,如果您不确定这一点,则应在尝试运行之前检查该函数是否存在,否则您将收到错误.

var target = 'doesNotExist';
if (jQuery.isFunction(target)) {
  jQuery('selector')[target]();
}
Run Code Online (Sandbox Code Playgroud)


Neo*_*Neo 10

在我的情况下,我需要从rel属性中获取值,然后将其解析为函数,这对我有用.

$jq('#mainbody form').submit(function(e){
    var formcheck = $jq(this).attr('rel');
    if (typeof window[formcheck] === 'function'){
        formok = window[formcheck]();
        e.preventDefault();
    }
});
function maincheck(){
    alert("Checked");
    return false;
}
Run Code Online (Sandbox Code Playgroud)

和形式

<div id="mainbody">
<form action="mainpage.php" method="post" rel="maincheck">
<input type="hidden" name="formaction" value="testpost">
<label>Field 1 <input type="text" name="field1" value="<?=$_POST['field1'];?>"></label><br>
<label>Field 2 <input type="text" name="field2" value="<?=$_POST['field2'];?>"></label><br>
<input type="submit" value="Submit Form">
</form>
</div>
Run Code Online (Sandbox Code Playgroud)