2010-07-24 12 views
38

È possibile chiamare una funzione utilizzando le stringhe?jQuery call function from a string

(ad esempio) Ho una variabile var target = 'next';. Usando questa stringa voglio chiamare il metodo jquery next(). Dovrei usare target + '()' (questo è un po 'sciocco) per chiamare next()?

So che si può fare usando le dichiarazioni conditional. Dal momento che è una stringa ottenuta dagli utenti, ma è difficile usare le istruzioni condizionali per tutto questo.

Nel mio plugin jQuery, gli utenti passeranno il valore prev, siblings ecc. Come opzioni, in modo che i rispettivi metodi jQuery vengano eseguiti.

Come implementarlo?

risposta

94

È possibile utilizzare il bracket notation per accedere al membro con una stringa che contiene l'identificativo:

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

wow non so questo! questo ha davvero ridotto le mie linee di codice! –

+2

Questo è davvero utile se si sa che è possibile chiamare il metodo usando 'MyObject.call (myFunctionName, args);' FTW programmazione funzionale. Grazie per il suggerimento, Gumbo. – josemota

+0

Avresti dovuto accettare la soluzione di moremore, perché questo non è stato salvato. Soprattutto perché non sai cosa digiti il ​​tuo utente. E se emette un refuso? La soluzione di moremore non infrangerà la tua sceneggiatura. –

13

Se hai intenzione di usare jQuery, la risposta è abbastanza elegante. Poiché jQuery è un oggetto (a cui è possibile accedere come un array), è possibile utilizzare $("selector")[target]().

Esempi:

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

Ciò funzionerà se si sa che si può fidare l'ingresso. Tuttavia, se non si è sicuri di ciò, è necessario verificare che la funzione esista prima di provare a eseguirla altrimenti si otterrà un errore.

8

Nel mio caso ho avuto bisogno di ottenere il valore da un attributo rel e quindi analizzarlo come una funzione, questo ha funzionato per me.

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

e la forma

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