J'ai suivi ce guide pour créer un nouveau JS en communication flash.
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, ma onChange
ne se charge pas. Erreurs de bug avec
me.onChange n'est pas une fonction
Je veux me dégrader gracieusement parce que ce n'est pas la fonctionnalité la plus importante de mon programme. typeof
donne la même erreur.
Des suggestions sur la manière de s’assurer qu’il existe et de n’exécuter que onChange
?
(Aucune des méthodes ci-dessous, sauf essayer d'attraper un travail)
Essayez quelque chose comme ça:
if (typeof me.onChange !== "undefined") {
// safe to use the function
}
ou mieux encore (selon le commentaire voté par UpTheCreek)
if (typeof me.onChange === "function") {
// safe to use the function
}
J'ai eu ce problème.
if (obj && typeof obj === 'function') { ... }
gardé jetant une erreur de référence si obj était indéfini.
Finalement, j'ai fait ce qui suit:
if (typeof obj !== 'undefined' && typeof obj === 'function') { ... }
Un collègue m'a fait remarquer que vérifier s'il s'agit bien de !== 'undefined'
puis de === 'function'
est bien sûr redondant.
Plus simple:
if (typeof obj === 'function') { ... }
Beaucoup plus propre et fonctionne très bien.
Si vous utilisez eval pour convertir une chaîne en fonction et que vous voulez vérifier si cette méthode eval'd existe, vous voudrez utiliser typeof et votre chaîne de fonction dans un eval :
var functionString = "nonexsitantFunction"
eval("typeof " + functionString) // returns "undefined" or "function"
N'inversez pas ceci et essayez un typeof on eval . Si vous faites une ReferenceError sera levée:
var functionString = "nonexsitantFunction"
typeof(eval(functionString)) // returns ReferenceError: [function] is not defined
Que diriez-vous:
if('functionName' in Obj){
//code
}
par exemple.
var color1 = new String("green");
"length" in color1 // returns true
"indexOf" in color1 // returns true
"blablabla" in color1 // returns false
ou comme pour votre cas:
if('onChange' in me){
//code
}
Voir Documents MDN .
Je n'ai pas vu ceci suggéré: me.onChange && me.onChange (str);
Fondamentalement, si me.onChange n'est pas défini (ce qui sera le cas s'il n'a pas été initié), il n'exécutera pas la dernière partie. Si me.onChange est une fonction, il m'exécutera.onChange (str).
Vous pouvez même aller plus loin et faire:
me && me.onChange && me.onChange(str);
dans le cas où moi est async aussi.
Essayez typeof
- Recherchez 'undefined'
pour indiquer qu'il n'existe pas, 'function'
pour une fonction. JSFiddle pour ce code
function thisishere() {
return false;
}
alert("thisishere() is a " + typeof thisishere);
alert("thisisnthere() is " + typeof thisisnthere);
Ou comme si:
if (typeof thisishere === 'function') {
// function exists
}
Ou avec une valeur de retour, sur une seule ligne:
var exists = (typeof thisishere === 'function') ? "Value if true" : "Value if false";
var exists = (typeof thisishere === 'function') // Returns true or false
Je vais faire un pas de plus pour m'assurer que la propriété est bien une fonction
function js_to_as( str ){
if (me && me.onChange && typeof me.onChange === 'function') {
me.onChange(str);
}
}
//Simple function that will tell if the function is defined or not
function is_function(func) {
return typeof window[func] !== 'undefined' && $.isFunction(window[func]);
}
//usage
if (is_function("myFunction") {
alert("myFunction defined");
} else {
alert("myFunction not defined");
}
J'aime utiliser cette méthode:
function isFunction(functionToCheck) {
var getType = {};
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}
Usage:
if ( isFunction(me.onChange) ) {
me.onChange(str); // call the function with params
}
Pour moi le moyen le plus simple:
function func_exists(fname)
{
return (typeof window[fname] === 'function');
}
La bibliothèque Underscore.js le définit dans la méthode isFunction en tant que telle (ce que les commentaires suggèrent peut résoudre certains problèmes de navigateur).
typeof obj == 'function' || false
Ce code jQuery simple devrait faire l'affaire:
if (jQuery.isFunction(functionName)) {
functionName();
}
Je suspecterais que me
ne soit pas correctement assigné en charge.
Déplacer l'appel get_ID dans l'événement onclick devrait s'en charger.
Évidemment, vous pouvez continuer à piéger, comme mentionné précédemment:
function js_to_as( str) {
var me = get_ID('jsExample');
if (me && me.onChange) {
me.onChange(str);
}
}
Je vérifie toujours comme ça:
if(!myFunction){return false;}
il suffit de le placer avant tout code utilisant cette fonction
J'avais le cas où le nom de la fonction variait en fonction d'une variable (var 'x' dans ce cas) ajoutée au nom de la fonction. Cela marche:
if ( typeof window['afunction_'+x] === 'function' ) { window['afunction_'+x](); }
J'ai essayé la réponse acceptée. toutefois:
console.log(typeof me.onChange);
renvoie 'undefined' . J'ai remarqué que la spécification indique un événement appelé 'onchange' au lieu de 'onChange' (notez le camelCase).
Changer la réponse initialement acceptée comme suit a fonctionné pour moi:
if (typeof me.onchange === "function") {
// safe to use the function
}
function js_to_as( str ){
if (me && me.onChange)
me.onChange(str);
}
Sans conditions
me.onChange=function(){};
function getID( swfID ){
if(navigator.appName.indexOf("Microsoft") != -1){
me = window[swfID];
}else{
me = document[swfID];
}
}
function js_to_as( str ){
me.onChange(str);
}
Si vous recherchez une fonction qui est un plugin jQuery, vous devez utiliser $ .fn.myfunction.
if (typeof $.fn.mask === 'function') {
$('.Zip').mask('00000');
}
Mettez le double point d'exclamation i.e !! avant le nom de la fonction que vous souhaitez vérifier. S'il existe, il retournera vrai.
function abc(){
}
!!window.abc; // return true
!!window.abcd; // return false
function function_exists(function_name)
{
return eval('typeof ' + function_name) === 'function';
}
alert(function_exists('test'));
alert(function_exists('function_exists'));
OR
function function_exists(func_name) {
// discuss at: http://phpjs.org/functions/function_exists/
// original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// improved by: Steve Clay
// improved by: Legaev Andrey
// improved by: Brett Zamir (http://brett-zamir.me)
// example 1: function_exists('isFinite');
// returns 1: true
if (typeof func_name === 'string') {
func_name = this.window[func_name];
}
return typeof func_name === 'function';
}
Voici une solution simple et pratique pour vérifier l’existence d’une fonction et le tri dynamique de cette fonction par une autre fonction;
Fonction de déclenchement
function runDynmicFunction(functionname){
if (typeof window[functionname] == "function" ) { //check availability
window[functionname]("this is from the function it "); //run function and pass a parameter to it
}
}
et vous pouvez maintenant générer la fonction dynamiquement peut-être en utilisant php comme ça
function runThis_func(my_Parameter){
alert(my_Parameter +" triggerd");
}
maintenant, vous pouvez appeler la fonction en utilisant un événement généré dynamiquement
<?php
$name_frm_somware ="runThis_func";
echo "<input type='button' value='Button' onclick='runDynmicFunction(\"".$name_frm_somware."\");'>";
?>
le code HTML exact dont vous avez besoin est
<input type="button" value="Button" onclick="runDynmicFunction('runThis_func');">
function sum(nb1,nb2){
return nb1+nb2;
}
try{
if(sum() != undefined){/*test if the function is defined before call it*/
sum(3,5); /*once the function is exist you can call it */
}
}catch(e){
console.log("function not defined");/*the function is not defined or does not exists*/
}
Et puis il y a ça ...
( document.exitPointerLock || Function )();
Essaye celui-là:
Window.function_exists=function(function_name,scope){
//Setting default scope of none is provided
If(typeof scope === 'undefined') scope=window;
//Checking if function name is defined
If (typeof function_name === 'undefined') throw new
Error('You have to provide an valid function name!');
//The type container
var fn= (typeof scope[function_name]);
//Function type
If(fn === 'function') return true;
//Function object type
if(fn.indexOf('function')!== false) return true;
return false;
}
Sachez que j'ai écrit ceci avec mon téléphone portable Peut contenir des problèmes de majuscules et/ou d'autres corrections nécessaires, telles que le nom de la fonction
Si vous voulez qu'une fonction comme PHP vérifie si la var est définie:
Window.isset=function (variable_con){
If(typeof variable_con !== 'undefined') return true;
return false;
}
Pour illustrer les réponses précédentes, voici un bref extrait de JSFiddle:
function test () {
console.log()
}
console.log(typeof test) // >> "function"
// implicit test, in javascript if an entity exist it returns implcitly true unless the element value is false as :
// var test = false
if(test){ console.log(true)}
else{console.log(false)}
// test by the typeof method
if( typeof test === "function"){ console.log(true)}
else{console.log(false)}
// confirm that the test is effective :
// - entity with false value
var test2 = false
if(test2){ console.log(true)}
else{console.log(false)}
// confirm that the test is effective :
// - typeof entity
if( typeof test ==="foo"){ console.log(true)}
else{console.log(false)}
/* Expected :
function
true
true
false
false
*/