Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery] podwojne wywolanie funkcji
Forum PHP.pl > Forum > Po stronie przeglądarki
trucksweb
mam checkboxa i do niego funkcje obslugujaca zaznaczenie
Cytat
$(".question_special").live("click", (function(e) {
var spId = $(this).attr("id");
spId = spId.substring(3);

alert(spId);

specialPanel = $('...............................................');

if($("#answers #"+spId+"-panel:visible").length == "0")
{
$(this).after(specialPanel).slideDown("fast");
return true;
}
else
{
$("#"+spId+"-panel").remove();
return true;
}
}));


a oto sam checkbox
  1. <input type="checkbox" id="sp-0" class="question_special" name="" />


calosc odbywa sie w oknie typu dialog jquery ui i za pierwszym razem jest ok- przycisk dziala i pokazuje sie specialPanel.
problem w tym ze przy kolejnym otwarciu okna dialog, przycisk wywoluje zarowno zaznaczenie jak i odznaczenie, co skutkuje ze nie pokazuje sie specialPanel.

ani e.stopPropagation ani returny nie pokagaja.

Czemu ?
erix
Returny nie mają prawa pomóc.

Pokaż, jak wywołujesz stopPropagation, która to wersja jQuery, a najlepiej wystaw gdzieś to na żywo.
trucksweb
Cytat
$(".question_special").live("click", (function(e) {
var spId = $(this).attr("id");
spId = spId.substring(3);

specialPanel = $('......................................');

alert($("#"+spId+"-panel:visible").length);

if($("#"+spId+"-panel:visible").length == "0")
{
$(this).after(specialPanel).slideDown("fast");
e.stopPropagation();
}
else if($("#"+spId+"-panel:visible").length == "1")
{
$("#"+spId+"-panel").remove();
e.stopPropagation();
}
e.stopPropagation();

}));


w tym drugim przypadku o ktorym mowie -alert pokazuje sie 2razy. raz z wartoscia 0 a potem z 1.
przy pierwszym otwarciu okna alert pokazuje sie tylko 1raz.


aplikacji pokazac nie moge bo robie na localu a zeby to przeniesc na serwer to za duzo roboty.
lord_t
A co się dzieje przy 3. i 4. wywołaniu?
trucksweb
za akzdym razem jak otworze nowe okno i wcisne tego checkboxa to alert pokazuje mi sie o 1 wiecej dry.gif
lord_t
Podejrzewam, że live za każdym razem kiedy pojawia się dialog dodaje tą samą funkcję. Spróbuj na końcu funkcji użyć metody preventDefault().
Jeśli to nie pomoże to przy usuwaniu dialogu trzeba by chyba użyć unbind().
trucksweb
faktucznie, wydaje sie ze trzeba zastosowac unbind lub die,

ale...
jak po wykonaniu funkcji (ale w jej wnetrzu) dam:
$(this).die("click");

to za drugim razem nie wlacze nawet dialoga

jak dam
$(this).die("click", ".question_special");
to poakze sie dialog ale nie wykona sie klikniecie na chekboxa.

Mozesz mi podpowiedziec jak to zrobic ?
lord_t
die() zabija Ci live(), a tego nie chcesz, myślę że trzeba użyć unbind().
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.