🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
7 messages
7 total messages Started by ksdrs Wed, 20 Oct 2010 11:26
jquery live()
#50354
Author: ksdrs
Date: Wed, 20 Oct 2010 11:26
23 lines
1492 bytes
Witam

Sprawa wyglada tak.
Po kliknieciu w link laduje ajaxem do diva formularz dodawania grafiki. 
W formularzu po kliknieciu w link laduje do diva ajaxem liste grafik. Po 
wybraniu grafiki zamykam liste i wracam do formularza. Po "zapisaniu" 
formularza zamykam go i wracam do pierwotnej strony.

Ladujac formularz laduje takze funkcje ktora ma przechwycic wybrana 
grafike z listy (ktorej jeszcze nie ma wczytanej).

     $(".imageSelector").live("click",function(){
         alert($(this).attr("id"));
     });

Wszystko wyglada fajnie do momentu gdy nie wywolam 2 raz formularza. Po 
wybraniu kolejnego pliku 2 razy zostaje przechwycony click i w efekcie 
mam 2 alerty.
Jak to ugryzc? Zalezy mi aby przechwytywaniem klikniecia zajmowal sie 
kod dostarczony z formularzem.


ksdrs
Re: jquery live()
#50355
Author: Paweł Arciszewski
Date: Wed, 20 Oct 2010 13:56
29 lines
2205 bytes
On 20 Paź, 13:26, ksdrs <ks...@onet.pl> wrote:
> Witam
>
> Sprawa wyglada tak.
> Po kliknieciu w link laduje ajaxem do diva formularz dodawania grafiki.
> W formularzu po kliknieciu w link laduje do diva ajaxem liste grafik. Po
> wybraniu grafiki zamykam liste i wracam do formularza. Po "zapisaniu"
> formularza zamykam go i wracam do pierwotnej strony.
>
> Ladujac formularz laduje takze funkcje ktora ma przechwycic wybrana
> grafike z listy (ktorej jeszcze nie ma wczytanej).
>
>      $(".imageSelector").live("click",function(){
>          alert($(this).attr("id"));
>      });
>
> Wszystko wyglada fajnie do momentu gdy nie wywolam 2 raz formularza. Po
> wybraniu kolejnego pliku 2 razy zostaje przechwycony click i w efekcie
> mam 2 alerty.
> Jak to ugryzc? Zalezy mi aby przechwytywaniem klikniecia zajmowal sie
> kod dostarczony z formularzem.
>
> ksdrs

Dzieje się tak dlatego, że tak na prawdę 2 razy podpinasz onclick.
Przenieś te linijki do "głównego" skryptu do $(document).ready().

Pozdrawiam,
Paweł Arciszewski
Re: jquery live()
#50356
Author: ksdrs
Date: Wed, 20 Oct 2010 14:41
13 lines
1440 bytes
W dniu 2010-10-20 15:56, Paweł Arciszewski pisze:
> Dzieje się tak dlatego, że tak na prawdę 2 razy podpinasz onclick.
> Przenieś te linijki do "głównego" skryptu do $(document).ready().

Wlasnie wolalbym tego uniknac. Cale "dzielo" ma polegac na ladowaniu 
formularzy dla roznych komponentow wybieranych w "glownym" skrypcie. 
Kazdy z tych formularzy zupelnie inaczej obsluguje swoja dzialke. 
Docelowo komponentow bedzie kilkadziedsiat i niekoniecznie na docelowym 
serwerze beda "zainstalowane" wszystkie.



ksdrs
Re: jquery live()
#50357
Author: Paweł Arciszewski
Date: Wed, 20 Oct 2010 15:39
32 lines
2387 bytes
On 20 Paź, 16:41, ksdrs <ks...@onet.pl> wrote:
> W dniu 2010-10-20 15:56, Paweł Arciszewski pisze:
>
> > Dzieje się tak dlatego, że tak na prawdę 2 razy podpinasz onclick.
> > Przenieś te linijki do "głównego" skryptu do $(document).ready().
>
> Wlasnie wolalbym tego uniknac. Cale "dzielo" ma polegac na ladowaniu
> formularzy dla roznych komponentow wybieranych w "glownym" skrypcie.
> Kazdy z tych formularzy zupelnie inaczej obsluguje swoja dzialke.
> Docelowo komponentow bedzie kilkadziedsiat i niekoniecznie na docelowym
> serwerze beda "zainstalowane" wszystkie.
>
> ksdrs

W takim razie niewłaściwie używasz funkcji live(). Ona właśnie służy
do podpinania handlerów nawet do dynamicznie tworzonych elementów i
należy ją wywoływać tylko raz.

Spróbuj:
$(".imageSelector").unbind('click').bind("click",function(){
alert($(this).attr("id"));
});

a jeśli tak bardzo zależy Ci na .live() to:
$(".imageSelector").die('click').live("click",function(){
alert($(this).attr("id"));
});
ale to nie ma sensu. Najlepiej jest unikać live() - to jest bardzo
zasobożerna funkcja.

Pozdrawiam,
Paweł Arciszewski
Re: jquery live()
#50358
Author: ksdrs
Date: Wed, 20 Oct 2010 17:45
13 lines
1345 bytes
W dniu 2010-10-20 17:39, Paweł Arciszewski pisze:
> Spróbuj:
> $(".imageSelector").unbind('click').bind("click",function(){
> alert($(this).attr("id"));
> });

Nie bardzo dziala. A nie jest tak ze bind zadziala tylko na juz 
isniejacych obiektach DOM? .imageSelector tworzony jest dopiero po 
wywolaniu ajaxem kolejnego "okna".



ksdrs
Re: jquery live()
#50359
Author: Paweł Arciszewski
Date: Wed, 20 Oct 2010 18:54
29 lines
2211 bytes
On 20 Paź, 19:45, ksdrs <ks...@onet.pl> wrote:
> W dniu 2010-10-20 17:39, Paweł Arciszewski pisze:
>
> > Spróbuj:
> > $(".imageSelector").unbind('click').bind("click",function(){
> > alert($(this).attr("id"));
> > });
>
> Nie bardzo dziala. A nie jest tak ze bind zadziala tylko na juz
> isniejacych obiektach DOM? .imageSelector tworzony jest dopiero po
> wywolaniu ajaxem kolejnego "okna".
>
> ksdrs

a nie możesz zrobić binda po załadowaniu okienka (diva) z grafiką. Coś
w stylu:

$.ajax({
...
success: function(zawartosc_okienka_z_grafika){
 jq('#okieno_z_grafika').html(zawartosc_okienka_z_grafika);
  $('#okieno_z_grafika .imageSelector').bind("click",function(){
  alert($(this).attr("id"));
  });
 }
});

Pozdrawiam,
Paweł Arciszewski
Re: jquery live()
#50361
Author: ksdrs
Date: Wed, 20 Oct 2010 19:09
8 lines
1337 bytes
W dniu 2010-10-20 20:54, Paweł Arciszewski pisze:

> a nie możesz zrobić binda po załadowaniu okienka (diva) z grafiką.

Cos czulem ze sie niepotrzebne rozpedzilem i polazlem od d... strony
Wielkie dzieki

ksdrs
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads