Autor | Zpráva | ||
---|---|---|---|
YaD Profil |
#1 · Zasláno: 27. 3. 2011, 14:12:00
Zdravím,
jQuery nerozpozná (alebo nevytvorí vzťah - neviem ako to funguje) novo vygenerované dáta pomocou DOM. Dáta načítavam zo serveru pomocou AJAJ-u a vložím pomocou DOM do webu. Avšak, každá položka má k sebe niekoľko operácií (uprav, vymaž, posuň hore, posuň dole). Tieto operácie jQuery už "nepozná", takže ak sú zavolané klikom myši, tak sa nič nestane. jQuery sa zatiaľ učím, takže sa ospravedlňujem za neznalosť. -.- (každý sme začínali :) Výcuc JS: $(function() { var funkcie = { pridaj:function(data) { var knihy = $('#knihy').find('tbody'), tr = document.createElement('tr'), meno = ['nazov','autor'], operacie = ['edit','delete','up','down']; for (var i = 0; i < 2; i++) { var td = document.createElement('td'); td.appendChild(document.createTextNode(data[meno[i]])); tr.appendChild(td); delete td; } for (i = 0; i < 4; i++) { var td = document.createElement('td'); var input = document.createElement('input'); input.setAttribute('class', 'event'); input.setAttribute('id', operacie[i]); input.style.cursor = 'pointer'; input.setAttribute('type', 'submit'); input.setAttribute('value', new String(data.id)); td.appendChild(input); tr.appendChild(td); delete td, input; } var edit = document.createElement('td'); var a = document.createElement('a'); var img = document.createElement('img'); knihy.find('tr').last().before(tr); } }; $.get('kniznica.php', function(data) { data = $.parseJSON(data); for (var i in data) funkcie.pridaj(data[i]); }); $('#posli').click(function() { var nazov = $('#nazov').val(), autor = $('#autor').val(); if (!nazov.length && !autor.length) return; $.ajax({ url: 'kniznica.php', cache: false, type: 'POST', data : {'nazov': nazov, 'autor': autor}, success: function(data) { funkcie.pridaj($.parseJSON(data)); }}); $('#nazov').val(''); $('#autor').val(''); }); $('#edit').click(function() { console.log('edit'); }); $('#delete').click(function() { console.log('delete'); }); $('#up').click(function() { console.log('up'); }); $('#down').click(function() { console.log('down'); }); }); Vtip je v tom, že event na #posli funguje v poriadku :-/. Ďakujem za akúkoľvek pomoc. |
||
Witiko Profil |
#2 · Zasláno: 27. 3. 2011, 17:54:48 · Upravil/a: Witiko
YaD:
Připojuješ eventy na v danou chvíli neexistující elementy. Funkce $("...").click(function(){}) na elementy lep až poté, co dojde k zavolání callbacku u ajaxu a ty dané elementy vložíš do dokumentu. Polopaticky tedy - řádky 63 - 81 přesuneš za řádek 56. Mimoto: 1) ID má být unikátní identifikátor a ty taháš do stránky několik elementů se shodným ID, to samo o sobě si říká o problémy. Je tu určitý důvod, proč jsou DOM funkce pojmenovány getElementsByTagName ale getElementById. 2) Jaký je účel tvorby objektu funkcie, když jediné co obsahuje je jedna funkce? Pokud nemá daný objekt do budoucna obsahovat víc funkcí, nemá jeho existence opodstatnění. To nemá mimochodem ani tak, jelikož je celý zápis obalen v anonymní funkci, což samo o sobě zaručuje lokální jmenný prostor a nekonfliktnost s globálními proměnnými. |
||
YaD Profil |
#3 · Zasláno: 27. 3. 2011, 19:13:08
Witiko:
1) Zatiaľ s tým len experimentujem, takže to mám len v takej funkčnej podobe. 2) Tých funkcií je tam podstatne viac, je to len výcuc. Díky za pomoc. |
||
ninja Profil |
#4 · Zasláno: 27. 3. 2011, 20:56:35
Můžete taky využívat .live()
|
||
Witiko Profil |
#5 · Zasláno: 27. 3. 2011, 21:46:11 · Upravil/a: Witiko
ninja:
To je už z definice dosti neefektivní věc, která těší jedině možná tak srdce programátora. Tzn. používal bych jen ve velmi specifických případech nebo kdybych se chtěl návštěvníkům stránek pomstít. :-) V tomto případě naštěstí použití live není nutné. |
||
Časová prodleva: 13 let
|
0