806 Stimmen

Wie prüft man, ob eine Funktion in JavaScript existiert?

Mein Code lautet

function getID( swfID ){
     if(navigator.appName.indexOf("Microsoft") != -1){
          me = window[swfID];
     }else{
          me = document[swfID];
     }
}

function js_to_as( str ){
     me.onChange(str);
}

Aber manchmal ist mein onChange wird nicht geladen. Firebug-Fehler mit

me.onChange ist keine Funktion

Ich möchte die Leistung schonend abbauen, da dies nicht die wichtigste Funktion in meinem Programm ist. typeof führt zu demselben Fehler.

Irgendwelche Vorschläge, wie man sicherstellen kann, dass sie existiert und dann nur onChange ?

(Keine der folgenden Methoden außer try catch one funktioniert)

7voto

Muhammad Tahir Punkte 2074
//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");
    }

6voto

MiffTheFox Punkte 20793
function js_to_as( str ){
     if (me && me.onChange)
         me.onChange(str);
}

6voto

Aylian Craspa Punkte 342

Hier ist eine funktionierende und einfache Lösung zur Überprüfung Existenz einer Funktion y diese Funktion dynamisch auszulösen durch eine andere Funktion;

Funktion auslösen

function runDynamicFunction(functionname){ 

    if (typeof window[functionname] == "function") { //check availability

        window[functionname]("this is from the function it"); // run function and pass a parameter to it
    }
}

und Sie können nun die Funktion dynamisch generieren, vielleicht mit php wie folgt

function runThis_func(my_Parameter){

    alert(my_Parameter +" triggerd");
}

jetzt können Sie die Funktion über ein dynamisch erzeugtes Ereignis aufrufen

<?php

$name_frm_somware ="runThis_func";

echo "<input type='button' value='Button' onclick='runDynamicFunction(\"".$name_frm_somware."\");'>";

?>

der genaue HTML-Code, den Sie benötigen, lautet

<input type="button" value="Button" onclick="runDynamicFunction('runThis_func');">

6voto

Sebastian H Punkte 99

Ich hatte den Fall, dass der Name der Funktion je nach einer Variable (in diesem Fall var 'x'), die dem Funktionsnamen hinzugefügt wurde, variierte. Das funktioniert:

if ( typeof window['afunction_'+x] === 'function' ) { window['afunction_'+x](); }

6voto

Matteus Barbosa Punkte 1957

Mit wenigen Worten: Fangen Sie die Ausnahme auf.

Ich bin wirklich überrascht, dass noch niemand auf diesen Beitrag über Exception Catch geantwortet oder ihn kommentiert hat.

Einzelheiten: Hier ein Beispiel, in dem ich versuche, eine Funktion zu finden, der das Präfix "mask_" und das Suffix "name" vorangestellt ist. Wenn JavaScript die Funktion nicht findet, sollte es eine ReferenceError die Sie auf der Fangseite nach Belieben bearbeiten können.

function inputMask(input) {
  try {
    let maskedInput = eval("mask_"+input.name);

    if(typeof maskedInput === "undefined")
        return input.value;
    else
        return eval("mask_"+input.name)(input);

  } catch(e) {
    if (e instanceof ReferenceError) {
      return input.value;
    }
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X