Autor Zpráva
YaD
Profil
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
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
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
Můžete taky využívat .live()
Witiko
Profil
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é.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: