web-dev-qa-db-ja.com

文字列からのjQuery呼び出し関数

文字列を使用して関数を呼び出すことは可能ですか?

(つまり)変数_var target = 'next';_があります。この文字列を使用して、jqueryメソッドnext()を呼び出します。 target + '()'を呼び出すためにnext()(これは少し馬鹿げています)を使用する必要がありますか?

conditionalステートメントを使用して実行できることは知っています。これはユーザーから取得した文字列なので、条件文をすべて使用することは困難です。

私のjQueryプラグインでは、ユーザーは値としてprevsiblingsなどをオプションとして渡し、それぞれのjQueryメソッドが実行されるようにします。

これを実装するにはどうすればよいですか?

43

ブラケット表記 を使用して、識別子を含む文字列でメンバーにアクセスできます。

var target = 'next';
$("foobar")[target]();    // identical to $("foobar").next()
108
Gumbo

JQueryを使用する場合、答えは非常にエレガントです。 jQueryはオブジェクト(配列のようにアクセスできる)であるため、$("selector")[target]()を使用できます。

例:

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

これは、入力を信頼できることがわかっている場合に機能します。ただし、これがわからない場合は、関数を実行する前に関数が存在することを確認する必要があります。そうしないと、エラーが発生します。

var target = 'doesNotExist';
if (jQuery.isFunction(target)) {
  jQuery('selector')[target]();
}
14
iblamefish

私の場合、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>
10
Neo