Ich arbeite daran, dynamisch JavaScript zu erstellen, das beim Erstellen in eine Webseite eingefügt wird.
Das JavaScript wird verwendet, um eine listbox
basierend auf der Auswahl in einer anderen zu füllen listbox
. Wenn die Auswahl von eins listbox
geändert wird, wird ein Methodenname aufgerufen, der auf dem ausgewählten Wert von basiert listbox
.
Beispielsweise:
Listbox1
enthält:
Colours
Shapes
Wenn Colours
ausgewählt, wird eine populate_Colours
Methode aufgerufen, die eine andere auffüllt listbox
.
Um meine Frage zu klären: Wie populate_Colours
rufe ich JavaScript auf?
javascript
dynamic
methods
Chris B.
quelle
quelle
Antworten:
Angenommen, die
populate_Colours
Methode befindet sich im globalen Namespace, können Sie den folgenden Code verwenden, der sowohl ausnutzt, dass auf alle Objekteigenschaften zugegriffen werden kann, als ob das Objekt ein assoziatives Array wäre, als auch dass alle globalen Objekte tatsächlich Eigenschaften deswindow
Hostobjekts sind.quelle
$.fn[method_prefix + method_name](arg1, arg2);
try
/catch
Block hinzuzufügen .$(function () {
undwindow.load
Code :)Wie Triptychon hervorhebt, können Sie jede globale Bereichsfunktion aufrufen, indem Sie sie im Inhalt des Hostobjekts finden.
Eine sauberere Methode, die den globalen Namespace viel weniger verschmutzt, besteht darin, die Funktionen explizit wie folgt explizit in ein Array einzufügen:
Dieses Array kann auch eine Eigenschaft eines anderen Objekts als des globalen Hostobjekts sein, was bedeutet, dass Sie effektiv Ihren eigenen Namespace erstellen können, wie dies bei vielen JS-Bibliotheken wie jQuery der Fall ist. Dies ist nützlich, um Konflikte zu reduzieren, wenn Sie mehrere separate Dienstprogrammbibliotheken auf derselben Seite einfügen und (sofern andere Teile Ihres Entwurfs dies zulassen) die Wiederverwendung des Codes auf anderen Seiten erleichtern.
Sie können auch ein Objekt wie dieses verwenden, das Sie möglicherweise sauberer finden:
Beachten Sie, dass Sie mit einem Array oder einem Objekt entweder die Methode zum Festlegen oder Zugreifen auf die Funktionen verwenden und natürlich auch andere Objekte darin speichern können. Sie können die Syntax beider Methoden für nicht so dynamische Inhalte weiter reduzieren, indem Sie die JS-Literalnotation wie folgt verwenden:
Bearbeiten: Natürlich können Sie für größere Funktionsblöcke das Obige auf das sehr verbreitete "Modulmuster" erweitern, das eine beliebte Methode ist, um Code-Features auf organisierte Weise zu kapseln.
quelle
var dyn_functions = {};
, um nicht unnötig ein Array zu erstellen. Dies ist jedoch kein großes Problem.Ich würde empfehlen , / / NICHT für diesen Zweck zu verwenden. Gehen Sie stattdessen folgendermaßen vor:
global
window
eval
Definieren Sie alle Methoden als Eigenschaften von Handler:
Nennen Sie es jetzt so
Ausgabe: Jerry
quelle
Sie können es so machen:
quelle
Innerhalb eines
ServiceWorker
oderWorker
durch ersetzenwindow
durchself
:Arbeiter haben keinen Zugriff auf das DOM, daher
window
ist dies eine ungültige Referenz. Die entsprechende globale Bereichskennung für diesen Zweck lautetself
.quelle
Ich würde nicht empfehlen, das Fenster zu verwenden, wie einige der anderen Antworten vermuten lassen. Verwendung
this
und Umfang entsprechend.Ein weiterer guter Trick besteht darin, innerhalb verschiedener Bereiche aufzurufen und ihn für die Vererbung zu verwenden. Angenommen, Sie haben die Funktion verschachtelt und möchten Zugriff auf das globale Fensterobjekt. Sie könnten dies tun:
quelle
Hallo versuch das,
Es wird die Parameter selbst behandeln.
quelle
functionName
... der Antwortende ging davon aus, dass Sie diesen bereits definiert hatten.Hier ist eine funktionierende und einfache Lösung, um das Vorhandensein einer Funktion zu überprüfen und diese Funktion dynamisch zu testen durch eine andere Funktion zu .
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
Versuchen Sie es damit:
quelle
eval
Funktion einige seltsame Nebenwirkungen im Zusammenhang mit ihrer Verwendung hat. Ich versuche im Allgemeinen, mich davon fernzuhalten, es sei denn, es ist ein letzter Ausweg.