Piotr
Stanek
Szukam pracy-
programista PHP
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.
Project Manager.
Aplikacje www. PHP,
Symfony, Zend.
Temat: akcje dla linków generowanych automatycznie
Piotr Stanek:Użyj .live(). Zamiast:
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ć.?
.click(function ()wstaw
.live('click', function ()Krzysztof N. edytował(a) ten post dnia 29.01.12 o godzinie 17:36
Piotr
Stanek
Szukam pracy-
programista PHP
Temat: akcje dla linków generowanych automatycznie
Dzięki działa.
Andrzej
Winnicki
Frontend Architect,
Developer &
Magician
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
Szukam pracy-
programista PHP
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
Student, Wyższa
Szkoła Informatyki
i Zarządzania w
Rzeszowie
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.
Andrzej
Winnicki
Frontend Architect,
Developer &
Magician
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
Szukam pracy-
programista PHP
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
Andrzej
Winnicki
Frontend Architect,
Developer &
Magician
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 ;)
Przemysław
Dziak
Programista /
Redaktor IT
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ć.
Piotr
Stanek
Szukam pracy-
programista PHP
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 ....
Paweł Nitka www.id2it.pl
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
