Pracuję nad dynamicznym utworzeniem kodu JavaScript, który zostanie wstawiony do strony internetowej w trakcie jej tworzenia.
JavaScript zostanie użyty do wypełnienia na listbox
podstawie wyboru w innym listbox
. Gdy wybór jednej listbox
zostanie zmieniony, wywoła ona nazwę metody na podstawie wybranej wartości listbox
.
Na przykład:
Listbox1
zawiera:
Colours
Shapes
Jeśli Colours
jest zaznaczone, wywoła populate_Colours
metodę, która zapełni inną listbox
.
Aby wyjaśnić moje pytanie: jak wykonać to populate_Colours
wywołanie w JavaScript?
javascript
dynamic
methods
Chris B.
źródło
źródło
Odpowiedzi:
Zakładając, że
populate_Colours
metoda znajduje się w globalnej przestrzeni nazw, możesz użyć następującego kodu, który wykorzystuje zarówno to, że wszystkie właściwości obiektu mogą być dostępne, jakby obiekt był tablicą asocjacyjną, jak i że wszystkie obiekty globalne są w rzeczywistości właściwościamiwindow
obiektu hosta.źródło
$.fn[method_prefix + method_name](arg1, arg2);
try
/catch
blok.$(function () {
iwindow.load
zakoduj :)Jak wskazuje Triptych, możesz wywołać dowolną funkcję zasięgu globalnego, znajdując ją w zawartości obiektu hosta.
Czystszą metodą, która znacznie mniej zanieczyszcza globalną przestrzeń nazw, jest jawne umieszczenie funkcji w tablicy bezpośrednio, tak jak pokazano poniżej:
Ta tablica może również być właściwością jakiegoś obiektu innego niż globalny obiekt hosta, co oznacza, że możesz efektywnie tworzyć własną przestrzeń nazw, tak jak robi to wiele bibliotek JS, takich jak jQuery. Jest to przydatne do zmniejszania konfliktów, jeśli / kiedy umieścisz wiele oddzielnych bibliotek narzędzi na tej samej stronie i (jeśli pozwalają na to inne części projektu), może ułatwić ponowne użycie kodu na innych stronach.
Możesz również użyć obiektu takiego jak ten, który może okazać się czystszy:
Zauważ, że w przypadku tablicy lub obiektu możesz użyć dowolnej metody ustawiania lub dostępu do funkcji i oczywiście możesz tam również przechowywać inne obiekty. Możesz dodatkowo zmniejszyć składnię obu metod w przypadku treści, które nie są tak dynamiczne, używając notacji literału JS, jak pokazano poniżej:
Edycja: oczywiście w przypadku większych bloków funkcjonalności możesz rozszerzyć powyższe do bardzo powszechnego „wzorca modułu”, który jest popularnym sposobem hermetyzacji funkcji kodu w zorganizowany sposób.
źródło
var dyn_functions = {};
możesz to zrobić, aby niepotrzebnie nie tworzyć tablicy ... nie jest to jednak duży problem.Radziłbym NIE używać
global
/window
/eval
do tego celu.Zamiast tego zrób to w ten sposób:
zdefiniuj wszystkie metody jako właściwości Handler:
Teraz nazwij to tak
Wyjście: jerry
źródło
możesz to zrobić w ten sposób:
źródło
W ciągu
ServiceWorker
lubWorker
wymienićwindow
zself
:Pracownicy nie mają dostępu do DOM, dlatego
window
jest to nieprawidłowe odniesienie. W tym celu równoważny globalny identyfikator zakresu toself
.źródło
Nie polecałbym korzystania z okna, jak sugerują niektóre inne odpowiedzi. Używaj
this
i stosuj odpowiednio.Kolejną fajną sztuczką jest wywoływanie w różnych zakresach i używanie go do dziedziczenia. Powiedzmy, że funkcja została zagnieżdżona i chcesz uzyskać dostęp do globalnego obiektu okna. Możesz to zrobić:
źródło
Cześć, spróbuj tego,
sam obsłuży parametry.
źródło
functionName
... osoba odpowiadająca założyła, że już ją zdefiniowałeś.Oto działające i proste rozwiązanie do sprawdzania istnienia funkcji i triaging, które działają dynamicznie przez inną funkcję;
Funkcja wyzwalania
i możesz teraz generować funkcję dynamicznie, na przykład używając php w ten sposób
teraz możesz wywołać funkcję używając dynamicznie generowanego zdarzenia
dokładny kod HTML, którego potrzebujesz, to
źródło
Spróbuj z tym:
źródło
eval
funkcja ma dziwne skutki uboczne związane z jej użyciem. Generalnie staram się trzymać od tego z daleka, chyba że jest to ostateczność.