jQuery fonction d'appel à partir d'une chaîne [dupliquer]

cette question a déjà une réponse ici:

Est-il possible d'appeler une fonction en utilisant les cordes ?

(I. e) j'ai une variable var target = 'next'; . L'utilisation de ce string je veux appeler la méthode jquery next() . Dois-je utiliser target + '()' (c'est un peu stupide) d'appeler next() ?

je sais que cela peut être fait en utilisant conditional . Puisque c'est une chaîne obtenu auprès des utilisateurs, mais il est difficile d'utiliser des instructions conditionnelles pour tous.

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

comment mettre en œuvre ceci ?

40
demandé sur Aakash Chakravarthy 2010-07-24 21:23:54

3 réponses

si vous voulez 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. Toutefois, si vous n'êtes pas sûr de cela, vous devez vérifier que la fonction existe avant d'essayer d'exécuter, sinon vous aurez une erreur.

var target = 'doesNotExist';
if (jQuery.isFunction(target)) {
  jQuery('selector')[target]();
}
14
répondu iblamefish 2017-02-21 21:36:53

Dans mon cas, j'avais besoin d'obtenir la valeur d'un attribut rel et ensuite l'analyser comme une 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>
9
répondu Neo 2012-09-27 10:53:32