Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wywołanie Jquery po otworzeniu SELECT-a, Dynamiczne ładowanie Selektów i jQuery po załadowaniu nowego Selekta
doktorek
post 20.09.2016, 14:12:23
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 26.07.2010

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


Hej

Mam dziwny problem...

Mam kilka rozwijanych <select></select>
Są one ładowane po kolei - po wybraniu pierwszego selekta - ładuje się kolejny.
ładowanie odbywa się przez javascript onChange=wgraj_kolejny()

Ale... problem jest taki, że jest jeszcze jeden skrypt jquery, który jest ładowany na starcie strony i on upiększa te selekty...
Ale upiększa tylko ten pierwszy, który jest widoczny na starcie.

Aby upiększył kolejny, który jest ładowany po wybraniu pierwszego należy go wywołać raz jeszcze.

I teraz jak zrobiłem sobie skrypt, który wywołuje to jquery w momencie kliknięcia na <select> to działa smile.gif
Ale nie działa kiedy kliknę na <select>, którego to jquery dotyczy... np.

Jak otworze selekt o id '#testowy' to jquery dziala i $("#drugi").customselect(); wywoluje sie poprawnie.
Ale jak otworze selekt o id '#drugi' to juz nie dziala smile.gif

<select id="testowy" class="test">
<option value="1">1</option>
<option value="2">2</option>
</select>

<script type="text/javascript">
$('#testowy').click(function(){
$("#drugi").customselect();
});
</script>

<script type="text/javascript">
$('#drugi').click(function(){
$("#drugi").customselect();
});
</script>
Go to the top of the page
+Quote Post
nospor
post 20.09.2016, 14:15:00
Post #2





Grupa: Moderatorzy
Postów: 36 459
Pomógł: 6297
Dołączył: 27.12.2004




Precierz #drugi nie istnieje po zaladowaniu strony wiec trudno oczekiwac by sie zdarzenie podpielo pod cos co nie instnieje.
Albo poczytaj o ON albo odpalaj upiekrzanie po zaladowaniu sie danego ajaxa


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
doktorek
post 20.09.2016, 14:42:00
Post #3





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 26.07.2010

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


Na tym polega problem...
Że jak selekt jest już załadowany...
To nawet jak mam prostą funkcję


$('#drugi').click(function(){
$("#drugi").customselect();
});


To nie działa smile.gif

Ale ... jak wywołam

$('#trzeci').click(function(){
$("#drugi").customselect();
});

To działa smile.gif

Nie działa wywołanie z tego ID funkcji, która ma na tym samym ID coś wykonać smile.gif

Pytanie jak załadować jquery po wgraniu innego ajaxa ?
Bo ładowanie jest nie przez jquery tylko

if(XMLHttpRequestObject) {
var lista = document.getElementById('pierwszy');
var tekstId = parseInt(lista[lista.selectedIndex].value);
XMLHttpRequestObject.open("GET", "zaladuj.php?id=" + tekstId);
XMLHttpRequestObject.onreadystatechange = function()
{
if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
var div = document.getElementById('drugi');
div.innerHTML = XMLHttpRequestObject.responseText;
}
}
XMLHttpRequestObject.send(null);
}
Go to the top of the page
+Quote Post
nospor
post 20.09.2016, 14:50:24
Post #4





Grupa: Moderatorzy
Postów: 36 459
Pomógł: 6297
Dołączył: 27.12.2004




Kod
...
if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
var div = document.getElementById('drugi');
div.innerHTML = XMLHttpRequestObject.responseText;
$("#drugi").customselect();
}
.....


ps: zdajesz sobie sprawe z dziwnosci faktu iz ajax lecisz po czystym js a reszte po jquery?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
doktorek
post 20.09.2016, 14:58:54
Post #5





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 26.07.2010

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


O matko...

Kiedyś wyczytałem, że nie można łączyć Jquery w czystym js.
Dlatego nawet nie próbowałem tego załadować po wrzuceniu do diva...

Co prawda przepiszę to wszystko ja jquery ale... zaskoczony jestem smile.gif

Dziękuję za pomoc zatem.

Działa...

Go to the top of the page
+Quote Post
gitbejbe
post 24.09.2016, 21:43:31
Post #6





Grupa: Zarejestrowani
Postów: 515
Pomógł: 63
Dołączył: 27.08.2012

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


jest jeszcze coś takiego jak "delegate" w jquery. Za pomocą tego dynamicznie sprawdzasz wskazane elementy - również te które dopiero będą wygenerowane.

.klasa_select -> twoja nazwa klasy identycznej dla każdego selekta którego chcesz przystroić

  1. $("body").delegate(".klasa_select", "click", function(){
  2.  
  3. var element = $(this);
  4.  
  5. // prosty filtr aby wykonać tylko raz akcje dla jednego elementu
  6. if(element.attr('active') == false) {
  7. element.customselect();
  8. element.attr('active', true);
  9. }
  10.  
  11. });


i to by było na tyle jeśli chodzi o Twój problem : )

Ten post edytował gitbejbe 24.09.2016, 21:47:19
Go to the top of the page
+Quote Post
viking
post 25.09.2016, 05:22:52
Post #7





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Nie ucz złych nawyków i przestarzałych metod. Delegate już dawno został zastąpiony przez .on i aż dziwne ze w jquery3 jest oznaczony jako deprecated zamiast po prostu wylecieć.

https://prophp.pl/article/15/jquery%2C_zdar...e_metoda_%24.on


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 4.05.2024 - 09:25