Autor Zpráva
houbeless
Profil
Zdravim vespolek.

Mám script, který při kliknutí na checkbox prostřednictvím ajaxu z jQuery pošle do vzdáleného scriptu stav 1,0. Tedy zaškrtávání checkboxu bez nutnosti potvrzovat formulář. Poslání stavové hodnoty mi funguje, ale potřeboval bych zjistit hodnotu atributu, v tomto případě v konstrukci 'name'. Tedy její obsah, a ten si chci také odeslat spolu se stavovou hodnotou.
Řekněme že mám seznam checkboxů:

	<li><input type=\"checkbox\" name=\"jedna\"><span>JEDNA</span></li>
    <li><input type=\"checkbox\" name=\"dva\" ...."


a potřebuju odeslat při každém kliknutí hodnotu name. Tedy jedna, nebo dva(tři, čtyři) podle toho na který element ze seznamu li kliknu. Kod který funguje pro odeslání stavu každého jednoho elementu vypadá takto:

	object.find("li").find('span').click(function(e){
		e.preventDefault();
		check_li = $(this).parent('li');
		checkbox = $(this).parent('li').find("input[type=checkbox]");

                	if(checkbox.attr('checked') == true){
                    $.post(url, { "data": bin.no });
					checkbox.attr('checked',false);
					check_li.removeClass('checked');
					check_li.addClass('unchecked');			
		}
		else{
                    $.post(url, { "data": bin.yes });
					checkbox.attr('checked',true);
					check_li.removeClass('unchecked');
					check_li.addClass('checked');
		}
	});


proměnné bin.no(yes) obsahují stavové hodnoty.
A teď bych do toho chtěl přidat kod který získá z každého elementu správý obsah jeho atributu, zhruba toto:
name = object.find("input").attr("name");

to mi ale vrací pro všechny položky seznamu checkboxů je hodnotu atributu 'jedna'.
Vim, že bych měl použít fci .each, nebo map ale nevim jak a nevim kam, resp. do které části kodu ji vepsat. Nejsem nijak zběhlý v používání jQuery, učím se, ale s tím to nejsem schopen pohnout i přes studium příkladů. Byl bych rád za nějak polopatistický příklad, abych to snadno pochopil. ;)
Díky
joe
Profil
Jestli to dobře chápu, tak řešení je jednoduché.
Tím, že napíšeš
object.find("li").find('span')

se ve skutečnosti provede nějaký cyklus, který všem těm nalezeným elementům přiřadí onclick, takže není třeba položky znovu procházet.

Mělo by tedy stačit:
$.post(url, { "data": bin.no, "name": checkbox.attr('name') });


A stejně tak i v té druhé části (za else), protože v proměnné checkbox je uložený ten input s tou hodnotou, kterou asi chceš
houbeless
Profil
Super, funguje. :)
jj, je to cyklus, a já právě nevěděl jak toho využít, ikdyž něco podobnýho mě napadlo, ale neuměl jsem to zapsat, resp. testoval jsem to blbě.
Jinak aby to fungovalo musí být zápis například:
"col": checkbox.attr('name')

protože ten 'name' je rezervovaný.
Oki, díky moc. já se s tim trápil celej den :D

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: