web-dev-qa-db-fra.com

Fonction d'appel jQuery à partir d'une chaîne

Est-il possible d'appeler une fonction en utilisant les chaînes?

(c'est-à-dire) j'ai une variable var target = 'next';. En utilisant cette chaîne, je veux appeler la méthode jquery next(). Dois-je utiliser target + '()' (c'est un peu idiot) pour appeler next()?

Je sais que cela peut être fait en utilisant les instructions conditional. Puisqu'il s'agit d'une chaîne obtenue des utilisateurs, mais il est difficile d'utiliser des instructions conditionnelles pour tout cela.

Dans mon plugin jQuery, les utilisateurs passeront la valeur prev, siblings etc comme options, de sorte que les méthodes jQuery respectives seront exécutées.

Comment puis-je implémenter cela?

43
Aakash Chakravarthy

Si vous souhaitez utiliser jQuery, la réponse est assez élégante. Parce que jQuery est un objet (auquel on peut accéder comme un tableau) - vous pouvez utiliser $("selector")[target]().

Exemples:

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

Cela fonctionnera si vous savez que vous pouvez faire confiance à l'entrée. Cependant, si vous n'êtes pas sûr de cela, vous devez vérifier que la fonction existe avant d'essayer de l'exécuter, sinon vous obtiendrez une erreur.

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

Dans mon cas, j'avais besoin d'obtenir la valeur d'un attribut rel, puis de l'analyser en tant que fonction, cela a fonctionné pour moi.

$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;
}

et le formulaire

<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