Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery] Problem z .on()
Adi32
post
Post #1





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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?


Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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

na
Kod
select.search


ważne że kropka jest przyklejona.
Go to the top of the page
+Quote Post
Adi32
post
Post #3





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 809
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.

Ten post edytował trueblue 28.05.2014, 09:16:41
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 14:25