Mon code est
function getID( swfID ){
if(navigator.appName.indexOf("Microsoft") != -1){
me = window[swfID];
}else{
me = document[swfID];
}
}
function js_to_as( str ){
me.onChange(str);
}
Cependant, parfois mon onChange
ne se charge pas. Erreurs Firebug avec
me.onChange n'est pas une fonction
Je veux me dégrader gracieusement car ce n'est pas la caractéristique la plus importante de mon programme. typeof
donne la même erreur.
Avez-vous des suggestions sur la façon de vous assurer qu'il existe et ensuite de l'exécuter uniquement onChange
?
(Aucune des méthodes ci-dessous, sauf essayez d'attraper un travail)
javascript
Alec Smart
la source
la source
Réponses:
Essayez quelque chose comme ceci:
ou mieux encore (selon le commentaire de UpTheCreek)
la source
undefined
exception dans le JavaScript. Je l'ai essayé.typeof window.alert === 'object'
.if (me.onChange) { // do something }
?me.onChange
pourrait alors s'agir de n'importe quoitrue
, pas nécessairement une fonction (par exemple, ce pourrait être un booléen, une chaîne, etc.). Par exemple, voir jsfiddle.net/j5KAF/1J'ai eu ce problème.
continuait à lancer une erreur de référence si obj n'était pas défini.
Au final, j'ai fait ce qui suit:
Un collègue m'a fait remarquer que vérifier si c'est
!== 'undefined'
et puis=== 'function'
c'est redondant bien sûr.Plus simple:
Beaucoup plus propre et fonctionne très bien.
la source
ReferenceError
? Cela me semble illogique.ReferenceError
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Si vous utilisez eval pour convertir une chaîne en fonction et que vous souhaitez vérifier si cette méthode évaluée existe, vous voudrez utiliser typeof et votre chaîne de fonction dans un eval :
N'inversez pas cela et essayez un typeof sur eval . Si vous faites une ReferenceError sera levée:
la source
var a = 'alert'; window[a]('it works');
Que diriez-vous:
par exemple
ou comme pour votre cas:
Voir les documents MDN .
la source
lastIndexOf()
dans la chaîne (nous savons, c'est-à-dire, mais théoriquement)typeof String().lastIndexOf === "function"
c'est vrai, mais'lastIndexOf' in String
c'est faux.Essayez
typeof
- Cherchez'undefined'
à dire qu'elle n'existe pas,'function'
pour une fonction. JSFiddle pour ce codeOu comme si:
Ou avec une valeur de retour, sur une seule ligne:
la source
N'a pas vu cela suggéré: me.onChange && me.onChange (str);
Fondamentalement, si me.onChange n'est pas défini (ce qu'il sera s'il n'a pas été lancé), il n'exécutera pas la dernière partie. Si me.onChange est une fonction, elle exécutera me.onChange (str).
Vous pouvez même aller plus loin et faire:
au cas où je serais asynchrone aussi.
la source
la source
&&
prise en charge de quelque chose que le jQueryisFunction
sur le côté droit du&&
ne fait pas?Pour moi, le moyen le plus simple:
la source
if ((typeof window["function_name"] !== 'undefined') && ((typeof window["function_name"] === 'function'))) { return true; } else { return false; }
mais c'est un ajustement mineurJe vais aller plus loin pour m'assurer que la propriété est bien une fonction
la source
la source
J'aime utiliser cette méthode:
Usage:
la source
La bibliothèque Underscore.js le définit dans la méthode isFunction comme ceci (ce que les commentaires suggèrent peut répondre à certains bogues du navigateur)
http://underscorejs.org/docs/underscore.html#section-143
la source
OU
la source
Mettez un double point d'exclamation, c'est-à-dire !! avant le nom de la fonction que vous souhaitez vérifier. S'il existe, il retournera vrai.
la source
En quelques mots: rattrapez l'exception.
Je suis vraiment surpris que personne n'ait encore répondu ou commenté Exception Catch sur ce post.
Détail: voici un exemple où j'essaie de faire correspondre une fonction qui est préfixée par mask_ et suffixée par le champ de formulaire "nom". Lorsque JavaScript ne trouve pas la fonction, il doit lancer une ReferenceError que vous pouvez gérer comme vous le souhaitez dans la section catch.
la source
Sans conditions
la source
Je soupçonne que la charge
me
n'est pas correctement affectée.Le déplacement de l'appel get_ID dans l'événement onclick devrait en prendre soin.
Évidemment, vous pouvez piéger davantage comme mentionné précédemment:
la source
Je vérifie toujours comme ça:
il suffit de le placer avant tout code utilisant cette fonction
la source
J'ai eu le cas où le nom de la fonction variait selon une variable (var 'x' dans ce cas) ajoutée au nom de la fonction. Cela marche:
la source
Ce simple code jQuery devrait faire l'affaire:
la source
J'ai essayé la réponse acceptée; toutefois:
renvoie «non défini». J'ai remarqué que la spécification indique un événement appelé «onchange» au lieu de «onChange» (notez le camelCase).
La modification de la réponse acceptée d'origine aux éléments suivants a fonctionné pour moi:
la source
Si vous recherchez une fonction qui est un plugin jQuery, vous devez utiliser $ .fn.myfunction
la source
J'ai également recherché une solution élégante à ce problème. Après mûre réflexion, j'ai trouvé cette approche meilleure.
const func = me.onChange || (str => {}); func(str)
;la source
(me.onChange||(_=>_))()
exécutera la fonction si elle existe, sinon ne fera rien.me.onChange && me.onChange()
éviter de définir une fonction void.Javascript moderne à la rescousse!
Cela pourrait ne pas avoir de grandes chances d'être vu avec la longue liste de réponses, mais cela est maintenant résolu * au niveau de la langue avec la nouvelle syntaxe de chaînage facultative
C'est aussi simple que cela -
onChange
n'est appelé que s'il existe .S'il
onChange
n'existe pas, rien ne se passe et l'expression revientundefined
- donc si elle a une valeur de retour que vous utiliseriez autrement, vous pouvez simplement vérifier cette valeur!== undefined
avant de continuer.Mise en garde de cas limite - si
onChange
ne existons , mais en est pas une fonction, vous obtenez unTypeError
. C'est comme vous vous en doutez, c'est la même chose que d'essayer d'appeler une non-fonction en tant que fonction, mais il convient de souligner explicitement que le chaînage facultatif ne fait aucune magie pour que cela disparaisse.* Eh bien, techniquement parlant, le chaînage facultatif est toujours une proposition de l'étape 4 TC39, il n'est donc pas encore dans la spécification ECMAScript, mais l'étape 4 signifie qu'il est finalisé et que son inclusion est essentiellement garantie, il attend juste qu'une nouvelle version soit livrée. Vous pouvez utiliser la syntaxe dans sa version finale aujourd'hui via Babel avec confiance qu'elle ne changera pas. C'est même en Typographie!
la source
Voici une solution simple et fonctionnelle pour vérifier l' existence d'une fonction et déclencher cette fonction dynamiquement par une autre fonction;
Fonction de déclenchement
et vous pouvez maintenant générer dynamiquement la fonction en utilisant peut-être php comme celui-ci
vous pouvez maintenant appeler la fonction à l'aide d'un événement généré dynamiquement
le code HTML exact dont vous avez besoin est
la source
la source
Et puis il y a ceci ...
la source
Essaye celui-là:
Sachez que j'ai écrit ceci avec mon téléphone portable Peut contenir des problèmes en majuscules et / ou d'autres corrections nécessaires comme par exemple le nom des fonctions
Si vous voulez qu'une fonction comme PHP vérifie si la var est définie:
la source
Pour illustrer les réponses précédentes, voici un rapide extrait JSFiddle:
la source
la source