Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wywołanie Jquery po otworzeniu SELECT-a, Dynamiczne ładowanie Selektów i jQuery po załadowaniu nowego Selekta
doktorek
post
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
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
Go to the top of the page
+Quote Post
doktorek
post
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 (IMG:style_emoticons/default/smile.gif)

Ale ... jak wywołam

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

To działa (IMG:style_emoticons/default/smile.gif)

Nie działa wywołanie z tego ID funkcji, która ma na tym samym ID coś wykonać (IMG:style_emoticons/default/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
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
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?
Go to the top of the page
+Quote Post
doktorek
post
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 (IMG:style_emoticons/default/smile.gif)

Dziękuję za pomoc zatem.

Działa...

Go to the top of the page
+Quote Post
gitbejbe
post
Post #6





Grupa: Zarejestrowani
Postów: 516
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
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 17:14