Mein Code ist
function getID( swfID ){
if(navigator.appName.indexOf("Microsoft") != -1){
me = window[swfID];
}else{
me = document[swfID];
}
}
function js_to_as( str ){
me.onChange(str);
}
Manchmal wird mein onChange
jedoch nicht geladen. Firebug-Fehler mit
me.onChange ist keine Funktion
Ich möchte mich elegant verschlechtern, da dies nicht das wichtigste Merkmal in meinem Programm ist. typeof
gibt den gleichen Fehler.
Irgendwelche Vorschläge, wie Sie sicherstellen können, dass es existiert und dann nur ausgeführt werden onChange
?
(Keine der folgenden Methoden außer versuchen, eine Arbeit zu fangen)
javascript
Alec Smart
quelle
quelle
Antworten:
Versuchen Sie so etwas:
oder noch besser (gemäß UpTheCreek-Kommentar)
quelle
undefined
Ausnahme im JavaScript auslöst . Ich versuchte es.typeof window.alert === 'object'
.if (me.onChange) { // do something }
?me.onChange
alles ausgewertet werden kanntrue
, nicht unbedingt eine Funktion (z. B. ein Boolescher Wert, eine Zeichenfolge usw.). Zum Beispiel siehe jsfiddle.net/j5KAF/1Ich hatte dieses Problem.
hat immer wieder einen Referenzfehler ausgegeben, wenn obj undefiniert war.
Am Ende habe ich folgendes gemacht:
Ein Kollege hat mich darauf hingewiesen, dass es natürlich überflüssig ist , zu prüfen, ob dies der
!== 'undefined'
Fall=== 'function'
ist.Einfacher:
Viel sauberer und funktioniert super.
quelle
ReferenceError
? Das erscheint mir unlogisch.ReferenceError
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Wenn Sie eval verwenden, um eine Zeichenfolge in eine Funktion zu konvertieren, und überprüfen möchten, ob diese eval'd-Methode vorhanden ist, sollten Sie typeof und Ihre Funktionszeichenfolge in einer Bewertung verwenden :
Nicht diese umkehren und versuchen typeof auf eval . Wenn Sie dies tun, wird ein ReferenceError ausgelöst:
quelle
var a = 'alert'; window[a]('it works');
Wie wäre es mit:
z.B
oder wie für Ihren Fall:
Siehe MDN-Dokumente .
quelle
lastIndexOf()
Zeichenfolge handelt (wir wissen, das heißt, aber theoretisch), isttypeof String().lastIndexOf === "function"
sie wahr, aber'lastIndexOf' in String
falsch.Versuchen Sie
typeof
-'undefined'
Sagen Sie, dass es'function'
für eine Funktion nicht existiert . JSFiddle für diesen CodeOder als ob:
Oder mit einem Rückgabewert in einer einzelnen Zeile:
quelle
Ich habe dies nicht vorgeschlagen gesehen: me.onChange && me.onChange (str);
Wenn me.onChange undefiniert ist (was der Fall ist, wenn es nicht initiiert wurde), wird der letzte Teil grundsätzlich nicht ausgeführt. Wenn me.onChange eine Funktion ist, wird me.onChange (str) ausgeführt.
Sie können sogar noch weiter gehen und Folgendes tun:
falls ich auch asynchron bin.
quelle
quelle
&&
um etwas, was der jQueryisFunction
auf der rechten Seite&&
nicht tut?Für mich der einfachste Weg:
quelle
if ((typeof window["function_name"] !== 'undefined') && ((typeof window["function_name"] === 'function'))) { return true; } else { return false; }
aber es ist eine geringfügige AnpassungIch werde noch einen Schritt weiter gehen, um sicherzustellen, dass die Eigenschaft tatsächlich eine Funktion ist
quelle
quelle
Ich benutze diese Methode gerne:
Verwendungszweck:
quelle
Die Underscore.js-Bibliothek definiert es in der isFunction-Methode wie folgt (die Kommentare deuten darauf hin, dass einige Browserfehler behoben werden können).
http://underscorejs.org/docs/underscore.html#section-143
quelle
ODER
quelle
Setzen Sie ein doppeltes Ausrufezeichen, dh !! vor dem Funktionsnamen, den Sie überprüfen möchten. Wenn es existiert, wird es true zurückgeben.
quelle
In wenigen Worten: Fangen Sie die Ausnahme.
Ich bin wirklich überrascht, dass noch niemand auf Exception Catch in diesem Beitrag geantwortet oder kommentiert hat.
Detail: Hier ist ein Beispiel, in dem ich versuche, eine Funktion zu finden, der mask_ vorangestellt und das Formularfeld "name" angehängt ist. Wenn JavaScript die Funktion nicht findet, sollte es einen ReferenceError auslösen, den Sie im catch-Abschnitt nach Belieben behandeln können.
quelle
Ohne Bedingungen
quelle
Ich würde vermuten, dass
me
die Onload nicht richtig zugewiesen wird.Das Verschieben des get_ID-Aufrufs in das onclick-Ereignis sollte sich darum kümmern.
Natürlich können Sie wie bereits erwähnt weiter fangen:
quelle
Ich überprüfe immer so:
Platzieren Sie es einfach vor einem Code, der diese Funktion verwendet
quelle
Ich hatte den Fall, dass der Name der Funktion gemäß einer Variablen (in diesem Fall var 'x') variierte, die dem Funktionsnamen hinzugefügt wurde. Das funktioniert:
quelle
Dieser einfache jQuery-Code sollte den Trick machen:
quelle
Ich habe die akzeptierte Antwort versucht; jedoch:
gibt 'undefined' zurück. Ich habe festgestellt, dass in der Spezifikation ein Ereignis namens "onchange" anstelle von "onChange" angegeben ist (beachten Sie den camelCase).
Das Ändern der ursprünglich akzeptierten Antwort auf Folgendes hat bei mir funktioniert:
quelle
Wenn Sie nach einer Funktion suchen, die ein jQuery-Plugin ist, müssen Sie $ .fn.myfunction verwenden
quelle
Ich habe auch nach einer eleganten Lösung für dieses Problem gesucht. Nach langem Nachdenken fand ich diesen Ansatz am besten.
const func = me.onChange || (str => {}); func(str)
;;quelle
(me.onChange||(_=>_))()
die Funktion aus, falls vorhanden, andernfalls wird nichts unternommen.me.onChange && me.onChange()
zu verhindern, dass eine Leerfunktion definiert wird.Modernes Javascript zur Rettung!
Dies könnte nicht eine große Chance hat , mit der langen Liste der Antworten gesehen zu werden, aber das ist jetzt * auf der Sprachebene mit der neuen gelöst Optional Chaining Syntax
So einfach ist das - wird
onChange
nur aufgerufen, wenn es existiert .Wenn
onChange
dies nicht vorhanden ist, geschieht nichts und der Ausdruck wird zurückgegeben.undefined
Wenn er also einen Rückgabewert hat, den Sie sonst verwenden würden, können Sie diesen Wert einfach überprüfen,!== undefined
bevor Sie fortfahren.Edge - Fall Nachteil - wenn
onChange
tut exist aber ist nicht eine Funktion geben Sie eine bekommenTypeError
. Dies ist wie zu erwarten, es ist dasselbe wie der Versuch, eine Nichtfunktion als Funktion aufzurufen, aber es sollte ausdrücklich darauf hingewiesen werden, dass die optionale Verkettung keine Magie ausübt, um dies zu beseitigen.* Nun, technisch gesehen ist die optionale Verkettung immer noch ein TC39-Vorschlag der Stufe 4, daher noch nicht in der ECMAScript-Spezifikation enthalten, aber Stufe 4 bedeutet, dass sie abgeschlossen ist und ihre Aufnahme im Wesentlichen garantiert ist. Sie wartet nur auf den Versand einer neuen Version. Sie können die Syntax in der endgültigen Version heute über Babel mit der Gewissheit verwenden, dass sie sich nicht ändert. Es ist sogar in Typoskript!
quelle
Hier ist eine funktionierende und einfache Lösung, um das Vorhandensein einer Funktion zu überprüfen und diese Funktion dynamisch durch eine andere Funktion auszulösen .
Auslöserfunktion
und Sie können die Funktion jetzt dynamisch generieren, möglicherweise mit PHP wie diesem
Jetzt können Sie die Funktion mit einem dynamisch generierten Ereignis aufrufen
Der genaue HTML-Code, den Sie benötigen, ist
quelle
quelle
Und dann ist da noch das ...
quelle
Probier diese:
Beachten Sie, dass ich dies mit meinem Handy geschrieben habe. Möglicherweise enthält es einige Probleme in Großbuchstaben und / oder andere Korrekturen, die erforderlich sind, z. B. der Name der Funktion
Wenn Sie möchten, dass eine Funktion wie PHP überprüft, ob die Variable gesetzt ist:
quelle
Um die vorhergehenden Antworten zu veranschaulichen, hier ein kurzer JSFiddle-Ausschnitt:
quelle
quelle