Thread View: pl.comp.lang.javascript
7 messages
7 total messages
Started by ksdrs
Wed, 20 Oct 2010 11:26
jquery live()
Author: ksdrs
Date: Wed, 20 Oct 2010 11:26
Date: Wed, 20 Oct 2010 11:26
23 lines
1492 bytes
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()
Author: Paweł Arciszewski
Date: Wed, 20 Oct 2010 13:56
Date: Wed, 20 Oct 2010 13:56
29 lines
2205 bytes
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()
Author: ksdrs
Date: Wed, 20 Oct 2010 14:41
Date: Wed, 20 Oct 2010 14:41
13 lines
1440 bytes
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()
Author: Paweł Arciszewski
Date: Wed, 20 Oct 2010 15:39
Date: Wed, 20 Oct 2010 15:39
32 lines
2387 bytes
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()
Author: ksdrs
Date: Wed, 20 Oct 2010 17:45
Date: Wed, 20 Oct 2010 17:45
13 lines
1345 bytes
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()
Author: Paweł Arciszewski
Date: Wed, 20 Oct 2010 18:54
Date: Wed, 20 Oct 2010 18:54
29 lines
2211 bytes
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()
Author: ksdrs
Date: Wed, 20 Oct 2010 19:09
Date: Wed, 20 Oct 2010 19:09
8 lines
1337 bytes
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