2012-12-01 20 views
21

Eventuali duplicati:
jQuery test for whether an object has a method?Controllare se la funzione esiste prima di chiamare?

voglio impostare se funzione esiste prima di chiamare JavaScript può aiutarmi come si fa questo ed applicare su questo script

$(document).ready(function() { 
    $(".cs-text-cut").lettering('words'); 
}); 
+0

@Alexei: Beh, a giudicare dall'esempio, penso che sia esattamente lo stesso. E anche se no, la soluzione (usando '$ .isFunction') è sempre la stessa ed è facilmente trasferibile. –

+0

@FelixKling, hai ragione, esatto duplicato. In qualche modo l'ha interpretato come un elemento usato, non il risultato del selettore jQuery. –

risposta

65

I Supponendo che tu voglia controllare e verificare che esista lettering, prova questo:

http://api.jquery.com/jQuery.isFunction/

Ecco un esempio:

if ($.isFunction($.fn.lettering)) { 
    $(".cs-text-cut").lettering('words'); 
} 
+1

+1. per usare 'isFunction', nota che la condizione è sbagliata - non dovrebbe controllarne una sulla finestra. –

+1

Il seguente funziona come previsto: 'if ($ .isFunction (window.lettering)) {' Se si dispone di una stenografia o di un modo migliore, non esitate a farmelo sapere e aggiornerò il suggerimento. – gregwhitworth

+3

La funzione sarà effettivamente in '$ .fn.lettering', non' window.lettering'. –

6

Se è la funzione lettering si vuole testare per, è possibile farlo in questo modo;

$(document).ready(function() { 
    var items = $(".cs-text-cut"); 
    if (items.lettering) { 
     items.lettering('words'); 
    } 
}); 

Oppure, se si vuole essere assolutamente sicuri items.lettering è una funzione prima di tentare di chiamarla, si può fare questo:

$(document).ready(function() { 
    var items = $(".cs-text-cut"); 
    if (typeof items.lettering === "function") { 
     items.lettering('words'); 
    } 
}); 

Oppure, se proprio non controllano l'ambiente in modo in realtà non si sa se la funzione di chiamata lettering è andare a lavorare o no e potrebbe anche generare un'eccezione, si può semplicemente mettere un gestore di eccezioni attorno ad esso:

$(document).ready(function() { 
    try { 
     $(".cs-text-cut").lettering('words'); 
    } catch(e) { 
     // handle an exception here if lettering doesn't exist or throws an exception 
    } 
}); 
+1

+1. modo ragionevole di controllare la proprietà sul risultato di jQuery select. L'aggiunta del controllo isFunction può essere buona, ma non necessaria. –

+0

Sicuramente il mio modo preferito perché non si basa su una libreria aggiuntiva. – cfx

12

Utilizzare questo per verificare se functi esiste

<script> 
if (typeof function_name == 'function') { 
     //function_name is a function 
} 
else 
{ 
//do not exist 
} 
</script> 
0

typeof $({}).lettering == 'function' o $.isFunction($({}).lettering) dovrebbe restituire un valore booleano per se è ancora o non disponibile.

Problemi correlati