来自字符串的jQuery调用函数

IT技术 javascript jquery string function methods
2021-03-07 20:47:10

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

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

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

在我的jQuery插件,用户将通过valueprevsiblings等等作为选项,使得相应的jQuery方法将被执行。

我该如何实现?

3个回答

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

var target = 'next';
$("foobar")[target]();    // identical to $("foobar").next()
@MarcoFranssen Atry … catch可以轻松解决这个问题。
2021-05-04 20:47:10
@MarcoFranssen 在这种情况下,您还应该检查它是否实际上是一个函数,例如jQuery.fn.length不是一个函数。
2021-05-08 20:47:10
尝试捕捉不是做到这一点的方法。如果您只是在调用之前检查一下,那就更好了。
2021-05-17 20:47:10
如果您知道可以使用MyObject.call(myFunctionName, args);函数式编程 FTW调用方法,这将非常有用谢谢你的提示,秋葵。
2021-05-19 20:47:10
你应该已经接受了稍微多一点的解决方案,因为这不是保存。特别是因为您不知道您的用户输入了什么。如果他打错了怎么办?稍微多一点的解决方案不会破坏你的脚本。
2021-05-19 20:47:10

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

例子:

const target = 'next';
jQuery("selector")[target]();

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

const target = 'doesNotExist';
const fn = jQuery('selector')[target];
if (jQuery.isFunction(fn)) {
  fn[target]();
}

就我而言,我需要从 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;
}

和表格

<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>