Mam widżety z dołączonymi kontrolkami javascript.
Jeśli widżet jest obecny podczas ładowania strony administratora widgetu, formanty działają poprawnie.
Gdy dodam nowy widżet, nie działają one poprawnie, otrzymuję znaczniki, ale żadne zdarzenia javascript nie działają.
Jeśli zapiszę nowy widżet, po ponownym załadowaniu formularza formanty są tworzone poprawnie i teraz działają.
Odświeżenie strony również rozwiązuje problem, ale tylko w przypadku istniejących widżetów. Nowe widżety nadal mają ten problem.
W szczególności uruchamiam selectize na wybranych wejściach w następujących punktach:
- dokument gotowy
- Ajaxcomplete
Sprawdziłem, czy mój kod jest uruchamiany przy każdym zdarzeniu zgodnie z oczekiwaniami, ale wyniki nie są zgodne z oczekiwaniami.
Oto wtyczka testowa pokazująca problem:
https://gist.github.com/Tarendai/8466299
Zobaczysz, że mam licznik, który rośnie wraz z każdym wybranym elementem, który może przekonwertować.
Uwagi:
- Po załadowaniu strony widżetu widzę wzrost licznika w konsoli JS zgodnie z oczekiwaniami
- Gdy dodam nowy widżet, kod jest uruchamiany, jednak nie można znaleźć żadnych wybranych elementów, na których mógłby działać, jak pokazano przez find. Długość wynosi 0. Nie powinno tak być, ponieważ każdy nowy widżet tego typu powinien mieć wybrany element
- elementy select mają klasę do ich identyfikacji, ta klasa jest usuwana po zastosowaniu biblioteki selectize, aby zapobiec powielaniu i ponownemu przetwarzaniu istniejących widgetów.
- Przed użyciem selectize użyłem Select2, który miał ten sam problem
- Komentując kod AJAX, oczekiwałbym, że nowe widżety będą miały standardowe wejście select. Oni nie. Nie wiem, dlaczego tak jest
Jak więc sprawić, aby kontrola wyboru działała bez powiadamiania użytkownika o odświeżeniu / kliknięciu opcji Zapisz przed dokonaniem zmian?
jQuery( document ).ajaxStop( function() {
część, aby móc zainicjować formanty w nowo załadowanych widżetach. Gdybym jednak usunął ten wiersz, spodziewałbym się, że nowe widżety będą miały standardowe dane wejściowe HTML, ale nie są to s
widget-updated
i widget-added
. Chciałbym również podkreślić w kodzie @ michaeljames użycie identyfikatora elementu #widgets-right
. Pamiętaj, aby używać go do kierowania elementów aktywnych widgetów w kodzie JS, w przeciwnym razie możesz uzyskać duplikaty elementów, ponieważ kod może również wybrać ukryte nieaktywne elementy widgetów po lewej stronie ekranu (i te zostaną sklonowane po dodaniu widgetu).
.on()
metodzie jQuerys . Co wymaga powiązania zdarzenia z dokumentem. Jednak jakie wydarzenie będzie odpowiednie, nie jestem teraz pewien. Ostatecznie dzieje się tak, ponieważ twoje oryginalne powiązania reprezentują początkową wersję DOM, gdy strona została załadowana, i w przeważającej części są ślepe na nowe elementy (treść widżetu), które są dodawane za pośrednictwem ajax. Mam nadzieję, że skieruje cię to w dobrym kierunku, jeśli nie, mogę odpowiedzieć lepiej, gdy jestem w pracy.