Autor Zpráva
vojja01
Profil *
Zdravím,
Titulek je trichu těžkopádný, tak se pokusím vysvětlit o co jde; když mám elementy ("sourozence") s nějakou class a atributem for (když nebereme vpotaz správnost vkládání vlastních atributů):
<div id="categories">
 <div class="category" for="1">dostupné</div>
 <div class="category" for="2">stažené</div>
</div>
a v js (součást objektu):
number = $("#categories .category").length; //počet elementů - 2
for(var i = 0; i <= number; i++) {
  $("#categories .category[for='"+i+"']").click( function () { //po kliknutí na každého se provede:
     $("#categories .category[for='"+i+"']").css("", ""); //cokoliv
     //atd...
  } );
}
Sice to funguje, ale jen pro poslední průchod cyklem (tj. 2. element). Teoreticky bych mohl každému elementu napsat tu funkci na událost onclick, ale chci, abych nemusel do elementu psát žádný js. Jde to napsat nějak jinak, nebo něco upravit? Strávil jsem tím docela dost času, tak píšu sem... Díky za každou odpověd :)
PS: úryvek je z jednoho velkého projektu Metroshome, o kterém všichni jednou uslyšíte! :D Ne dělám si srandu :D
Chamurappi
Profil
Reaguji na vojju01:
Viz Lexikální uzávěr.
vojja01
Profil *
Díky, vím sice o něco víc (což se vždycky cení), ale teď to pro změnu funguje pouze pro první element. Pro ten druhý to vůbec nezaregistruje ani událost onclick.
pcmanik
Profil
vojja01:
A nebolo by lepšie na rodičovi odchýtavať kliknutia? Budeš tak mať jeden event handler namiesto 2, resp. Koľko potomkov budeš mať.
joe
Profil
vojja01:
1. Chybí ti před number ještě var.
2. Můžeš to celé udělat zápisem využívající jQuery:

$("#category .categories").each(function () {
    var category = $(this);
    category.click(function () {
        alert(category.attr("for"));
    });
});

3. Lepším řešením bude používat jen jedno odchytávání události

$("#category").on("click", ".category", function () {
    var category = $(this);
    alert(category.attr("for"));
});

4. Používáš dvakrát vytváření stejného objektu se stejným selektorem $("#categories .category[for='"+i+"']"), to je zbytečné.
pcmanik
Profil
joe:
Nezdá sa ti že v treťom riešení vytváraš zbytočné ďalšie odchytávanie udalosti?
Veď v this už máš toho potomka na ktorý bolo kliknuté.
Resp. po kliknutí sa ešte len priradí ďalšia odchytávanie kliknutia a až na následné kliknutie vyskočí alert.

$("#category").on("click", ".category", function () {
    alert($(this).attr("for"));
});
joe
Profil
pcmanik:
Samozřejmě, (zkopíroval jsem dvojku a pak to uvnitř zapomněl upravit) opravil jsem, díky.

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: