Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Problem z .on()
Forum PHP.pl > Forum > Po stronie przeglądarki
Adi32
Jak wiadomo, on bardzo przydaje się gdy chcemy zaczepić event na elemencie dynamicznym, wystarczy zawiesić handler na rodzicu, który jest statyczny:

  1. 1 ListView.contentSearch.on('change', 'select[class="search"]', function(event){
  2. 2 console.log( $(this) )
  3. 3 Search.changeSearchFieldAction($(this));
  4. 4 });


ListView = klasa zawierająca metody operacji na liście
contentSearch = statyczny element, zawiera w sobie dynamiczną wyszukiwarkę
zaczepiam event na select o klasie search (w tym selekcie wybieramy z listy po jakim polu chcemy wyszukiwać, metoda changeSearchFieldAction ładuje na tej podstawie dwa dodatkowe pola: "codnitions"[] czyli warunki(równe, różne, mniejsze, większe, zakres jeśli typ pola to date) i pole na wartość (lub dwa pola jeśli data, lub pole select jeśli enum) )

O co chodzi... Błąd jest w linji 1, a dokładniej ta fraza: 'select[class="search"]'
jeżeli temu selectowi dodam jakąś klase, to to przestaje działać.

(ps. widzicie tam w drugiej linji jest console.log, on zwraca "jQuery(select.search)" i tak powinno być)

Jak byłoby idealnie:

  1.  
  2. var S = ListView.contentSearch.find('select.search');
  3.  
  4. ListView.contentSearch.on('change', S ,function(event){
  5. event.stopPropagation();
  6. console.log( $(this) )
  7. search.changeSearchFieldAction($(this));
  8. });


ALE NIE! S jest obiektem, a jako drugi parametr musi być string bo inaczej console.log zwraca "jQuery(div.contentSearch)" a to mi do niczego nie potrzebne

Moje pytanie: Jak ze zmiennej S wyciągnąć stringa który będzie nakierowywał dokładnie na to o co mi chodzi?
Próbuje np. S.get(0).nodeName - ale to mi zwraca tylko string "SELECT" i w dodatku tylko pierwszego noda, niedopuszczalne... z tym, że to tylko jeden to bym sobie poradził jamimś eachem albo coś.

Nie wiem, może jQuery trzyma coś takiego jak własny unikalny ID (nie #) każdego obiektu w dokumencie który dałoby się wyciągnąć np ListView.contentSearch.getUniqueId i przekazać jako drugi parametr do .on() tak żeby on wiedział o co chodzi?


Pyton_000
a jak zamienisz
Kod
select[class="search"]

na
Kod
select.search


ważne że kropka jest przyklejona.
Adi32
Wiem o co chodzi i to nie działało, ale z ciekawości spróbowałem teraz, i poszło. Może różnica wersji ma w tym przypadku znaczenie. W każdym razie dzięki.
I tak zastanawia mnie, czy da się użyć .on() posiadając jedynie dynamiczny objekt jQuery(). Pewnie to kwestja zwinnego wyssania selektora.
trueblue
Jak rozumiem, oprócz klasy search nadawałeś selectowi również inną klasę.
Jeśli tak, to selektor: select[class="search"] nie miał prawa zadziałać, bo dotyczy sytuacji kiedy atrybut class zawiera dokładnie tą frazę.
W przypadku kiedy select zawiera również inne klasy, to zadziała selektor: select[class~="search"]
No, i oczywiście najprostsze rozwiązanie, które podał Phyton_000.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.