Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: akcje dla linków generowanych automatycznie

Hej,

przerobiłem jeden skrypt (tj. flexgrid)

dodałem tam plugin legendy tzn odp rekordy są oddzielnym kolorem i chcę pokazywać teraz legendę dla każdego koloru (tu WSZYSTKO działo)

ale pomyślałem, że dodam akcje klikalne dla każdego elementu w legendzie

kod


g.mDiv.className = 'mDiv';


g.mDiv.innerHTML += '<div class="ftitle"><span style="float:left;padding:6px">' + p.title + '</span>';

if (p.legend) {

for (var i = 0; i < p.legend.length; i++) {
var btn = p.legend[i];
$(g.mDiv).append("<span style='margin-top:-5px;margin-right:5px;float;left;padding:3px;float:right' class='" + btn.bclass + "'><a href='#' class='" + btn.typ + "'>" + btn.name + "</a></span>");

$('span a.' + btn.typ + '', g.mDiv).click(function () {

alert('this action for method');

});

}

}




powyższy kod generuję legendę itp ale jak klikam w coś to już nie wykonuje mi się alert wie ktoś jak to rozwiązać.?
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: akcje dla linków generowanych automatycznie

Piotr Stanek:
pomyślałem, że dodam akcje klikalne dla każdego elementu w legendzie
(...)
powyższy kod generuję legendę itp ale jak klikam w coś to już nie wykonuje mi się alert wie ktoś jak to rozwiązać.?
Użyj .live(). Zamiast:
.click(function ()
wstaw
.live('click', function ()
Krzysztof N. edytował(a) ten post dnia 29.01.12 o godzinie 17:36
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: akcje dla linków generowanych automatycznie

Dzięki działa.

konto usunięte

Temat: akcje dla linków generowanych automatycznie

zamiast live uzywaj delegate...

live powinno byc uzywane tylko wtedy kiedy nie ma innego wyjscia, w 99% przypadkach mozna uzyc delegate, ktory dziala duzo szybciej, zwlaszcza jesli na stronie bedziesz mial na przyklad 100 linkow... albo 1000 ;)

ps. w przypadku ktory podales click powinnien dzialac i chbya bedzie to najlepsza metoda.
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: akcje dla linków generowanych automatycznie

"click" powinien działać ale nie działa :( tak jak by jquery nie wiedziało o kliknięciu. sprawdzę "delegate".

100 linków nie będzie kilka max 10 na jednej warstwie DIV
Paweł Janda

Paweł Janda Programista C# /
ASP.Net / Metro

Temat: akcje dla linków generowanych automatycznie

Andrzej Winnicki:
ps. w przypadku ktory podales click powinnien dzialac i chbya bedzie to najlepsza metoda.

Przecież click nie zadziała dla elementów tworzonych dynamicznie.

konto usunięte

Temat: akcje dla linków generowanych automatycznie

Paweł Janda:
Andrzej Winnicki:
ps. w przypadku ktory podales click powinnien dzialac i chbya bedzie to najlepsza metoda.

Przecież click nie zadziała dla elementów tworzonych dynamicznie.

dziala pod warunkiem ze zostanie dodany "po" dodaniu elementow do DOM
a patrzac tutaj, mamy loopa, ktory laduje tresc w DOM, dla kazdego mozna spokojnie dodac binda i powinno dzialac.

wiec stwierdzenie "click nie dziala dla elementow tworzonych dynamicznie" jest nieprawda ;)

ps. a tak w ogole to clicka tutaj lepiej juz dodac po za loopem, hurtem dla wszystkich przyciskow, chociaz nie wiadomo (poki co) co tak naprawde ma sie dziac po kliknieciu...Andrzej Winnicki edytował(a) ten post dnia 29.01.12 o godzinie 23:47
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: akcje dla linków generowanych automatycznie

ma przesortować odp dane, ale to bez znaczenia. "delegate" nie działa binda zobaczę ale chyba zostawię "live"Piotr Stanek edytował(a) ten post dnia 30.01.12 o godzinie 13:49

konto usunięte

Temat: akcje dla linków generowanych automatycznie

Piotr Stanek:
ma przesortować odp dane, ale to bez znaczenia. "delegate" nie działa binda zobaczę ale chyba zostawię "live"

delegate to to samo co live tylko ze lepsze.
Wiec jak nie dziala to nie dlatego ze "nie ma fantazji" tylko daltego ze kod jest zle napisany :)

Sugeruje w takim razie postudiowanie podstaw jquery (juz nie mowiac o js), bo tak w ciemno to daleko nie zajdziesz ;)

konto usunięte

Temat: akcje dla linków generowanych automatycznie

Jeszcze mamy livequery (http://docs.jquery.com/Plugins/livequery), ale delegate czy live powinno w tym przypadku wystarczyć.
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: akcje dla linków generowanych automatycznie

[na marginesie] Od wersji 1.7 zamiast .live(), .delegate() czy livequery (oraz .bind()) używamy .on() / .off()

http://blog.jquery.com/2011/11/03/jquery-1-7-released/
http://api.jquery.com/on/
http://api.jquery.com/off/
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: akcje dla linków generowanych automatycznie

Problem rozwiązałem troszkę inaczej.

$('.search_legend', g.mDiv).live('click', function ()
{
g.doSearchLegend($(this).attr('id'), $(this).attr('rel') );
//show clear actions
});
g.mDiv.innerHTML += '<div class="ftitle"><span style="float:left;padding:6px">' + p.title + '</span>';
if (p.legend) {
for (var i = 0; i < p.legend.length; i++) {
var btn = p.legend[i];
$(g.mDiv).append('<span style="margin-top:-5px;margin-right:5px;float;left;padding:3px;float:right" class="' + btn.bclass + '"><a href="#" class="search_legend" id="' + btn.typ + '" rel="' + btn.search +'">' + btn.name + '</a></span>');
}
}



nie musze generować tyle "click" ile jest generowanych przycisków.

Andrzej: taki komentarz "Sugeruje w takim razie postudiowanie podstaw jquery (juz nie mowiac o js), bo tak w ciemno to daleko nie zajdziesz ;)" nie potrzebny ....

konto usunięte

Temat: akcje dla linków generowanych automatycznie

jeśli dobrze zrozumiałem twój zamiar, mój kod powinien działać idealnie (delikatnie poprawiłem to, co ci zadziałało):


g.mDiv.innerHTML += '<div class="ftitle"><span style="float:left;padding:6px">' + p.title + '</span>';
if (p.legend) {
for (var i = 0; i < p.legend.length; i++) {
var btn = p.legend[i],
html = '<span style="margin-top:-5px;margin-right:5px;float;left;padding:3px;float:right" class="' + btn.bclass + '"><a href="#" class="search_legend" id="' + btn.typ + '" rel="' + btn.search +'">' + btn.name + '</a></span>';
$(g.mDiv).append(html);
}
}

$(g.mDiv).on('click', '.search_legend', function ()
{
g.doSearchLegend($(this).attr('id'), $(this).attr('rel') );
//show clear actions
});


live() to niestety kiepska funkcja z powodów wydajnościowych (nie będę się rozpisywał, jest tego pełno w sieci). Ogólnie dzięki mojemu rozwiązaniu masz tylko jeden eventListener na wszystkie wygenerowane legendy... poza tym jest to preferowany sposób dodawania eventów od aktualnej wersji jQuery.
jeszcze jedna uwaga - mój kod zadziała dla wersji jQuery 1.7Paweł Nitka edytował(a) ten post dnia 02.02.12 o godzinie 22:28



Wyślij zaproszenie do