Autor Zpráva
ybznek
Profil

ahoj, potřebuju nastavit akce,.. k jednotlivým tlačítkům,
tlačítko by mělo obsahovat informace [id_vlastnosti,pocet]
jak mám rozpoznat tlačítka od sebe/nastavit identifikátory

chci to asi takhle
$(".tlacitka").mouseover(function(){
alert( $(this).count + 'x' + $(this).idProperty);
});



v Chrome(možná i jinde) to funguje třeba
<button statCount="3" class="shop_button">3</button>



$(".shop_button").click(function(){
    alert($(this).attr("statCount"));
});

ale přijde mi to jako nevalidní


Jaké by bylo správné řešení?
Witiko
Profil
ybznek:
ale přijde mi to jako nevalidní
Osobně na tom nevidím nic nevalidního. Pokud člověku jde o oddělení scriptu a dat, pak se jedná o překvapivě čisté řešení.
ybznek
Profil
Witiko:
myslím, že se do html nedaj cpát jen tak nějaké atributy...
Kcko
Profil
ybznek:
Nedají. Používám spojené identifikátory například do třídy

<img src="pic.jpg" id="atribut1_atribut2_atribut_3" />

snadno rozparsujes a použiješ.
Witiko
Profil
Kcko, ybznek:
myslím, že se do html nedaj cpát jen tak nějaké atributy
Můžu poprosit o živou ukázku? :-)
Chamurappi
Profil
Reaguji na ybznka:
myslím, že se do html nedaj cpát jen tak nějaké atributy
Proč by ne? Jen si musíš dát pozor, aby byly opravdu tvé, tzn. vyhnout se konfliktním pojmenováním, která by už mohla mít nějaký nativní význam v některém z prohlížečů.
V XML by šlo využít jmenné prostory, ale HTML není XML.

ale přijde mi to jako nevalidní
Z hlediska jazyka HTML to validní není. Takže ti validátor řekne „tady máš nějaký neznámý atribut“ a ty si řekneš „není neznámý, ten je můj!“ … a tím to hasne.
ybznek
Profil
Kcko:
To je dobré, ale bez znalosti reg. výrazů to musím vždycky parsovat znak po znaku a taky nevím, jak by to bylo ve výsledku s rychlostí to mít u více elementů
Witiko:
tak všechno jde, ale jde o to, zda to je/není správné
Chamurappi:
teď mi to je jedno, ale třeba kdybych dělal portfolio o sobě a psal, že tvořím validní kód a někdo by se podíval do validátoru a vyskočilo by na něho několik chyb...

HTML5 má prý atributy jako
data-moje-promenna="moje-moje-hodnota"

ale pro momentální html standard mi přijde asi nejlepší volba od Kcko

Děkuji za pomoc
_es
Profil
ybznek:
HTML5 má prý atributy jako
data-moje-promenna="moje-moje-hodnota"
ale pro momentální html standard mi přijde asi nejlepší volba od Kcko
No tak to môžeš validovať aj ako HTML5.
joe
Profil
ybznek:
data-moje-promenna="moje-moje-hodnota"
Asi nejlepší způsob
Str4wberry
Profil
ale bez znalosti reg. výrazů to musím vždycky parsovat znak po znaku a taky nevím

Ne, stačí ti pouhý split. Nicméně taktéž souhlasím, že je lepší použít ty vlastní atributy.
shaggy
Profil
ybznek:
HTML5 má prý atributy jako
>
1
>
data-moje-promenna="moje-moje-hodnota"
A keďže používaš jQuery, tak by si k týmto atribútom mohol pristupovať aj cez
$(selector).data("moje-promenna")

prípadne
$(selector).data("mojePromenna")

podľa toho, ktorú verziu používaš. Uvádzam to len pre úplnosť, akékoľvek riešenie bude OK.
Kcko
Profil
ybznek:
Nepotřebuješ parsovat znak po znaku. Jednotlivé "dynamické" atributy nebo identifikatory oddělíš vlastním separátorem, třeba podtržítkem a pak je rozdělíš do pole pomocí metody
split


tj
var elementy = $("element").attr("id").split("_");


A je to.
Witiko
Profil
Kcko, ybznek:
Myslím, že to s tou nevaliditou přeháníte. Stejně tak je nevalidní v prohlížečích nepodporujících nové HTML5 tagy a atributy dané tagy a atributy používat, ačkoliv ve skutečnosti jsou k tomu autoři vybízeni a prohlížeč neznámý tag / atribut ignoruje.

Navrhované řešení je sice funkční, ale validní tedy rozhodně není, jelikož element se stejným id by se měl na stránce objevit jen jednou:
<!doctype html>
<html>
  <head>
    <title>Aaa</title>
    <meta charset = "utf-8">
  </head><body>
    <span id="aaa"></span>
    <span id="aaa"></span>
  </body>
</html>
Výsledek:
Validation Output: 1 Error
Line 8, Column 15: Duplicate ID aaa.

Navíc to rozhodně není sémantické, protože cpát datové pole do identifikátoru je prostě prasárna, nezlobte se na mě. :-)

I pakliže uložíte dané pole do jiného existujícího atributu (class - ještě zábavnější, prohlížeč se bude snažit najít css třídu), stejně dojdete k problému modularity. Tzn. pokud budete chtít vytvořit více knihoven, které budou zacházet s elementy na základě html atributu, každá bude muset parsovat dané pole, což by vůbec nemuselo být nutné.

Abych to shrnul, myslím, že si zbytečně hážete klacky pod nohy. :-)
Kcko
Profil
Witiko:
Mě nejde o validitu. Ja teda tohle cpu vždycky do parametru rel
S vlastním parametrem si nejsem jistý, jak by se na to tvářily prohlížeče (myslím to tak, že pokud si udělám vlastní parametr např. <input type="text" name="neco" price="50USD" />
tak aby to bylo možné zachytit

alert($("input").attr("price"));


Já na validitu kašlu, nemám ani jeden web validní, pro mě je důležité aby se weby zobrazovaly dobře a né aby mi validátor cpal, že mi někde chybí zapomenutý alt atp.
Nemám to ozkoušené, bude fungovat smyšlený atribut a jeho zachycení všude?


Navrhované řešení je sice funkční, ale validní tedy rozhodně není, jelikož element se stejným id by se měl na stránce objevit jen jednou: 

To u mě nikdy ale přeci nikdy nenastane.
Chamurappi
Profil
Reaguji na Witika:
prohlížeč neznámý tag / atribut ignoruje
To není přesné. Ignoruje syntaktický balast, ale neignoruje právoplatné části DOMu. Elementy i atributy v dokumentu jsou, jen nemají žádnou nativní funkci, takže se nijak neprojevují. Což je naprosto legitimní zákonitost, která zařizuje dopřednou kompatibilitu HTML a toleranci k rozšířením (jak ze strany tvůrců prohlížečů, tak ze strany tvůrců stránek).


Reaguji na Kcka:
Ja teda tohle cpu vždycky do parametru rel
To je také prasárna. Atribut rel vyjadřuje vztah odkazující stránky k odkázané. Tedy měl by. Kvůli blbě napsaným skriptům, které se bojí vymyslet si vlastní atribut, je tenhle jeho účel v praxi zlikvidovaný, nejde ho brát vážně.

S vlastním parametrem si nejsem jistý, jak by se na to tvářily prohlížeče
Úplně normálně. Není důvod, aby se tvářily jinak. Jednak by jim případný problém musel někdo výslovně naprogramovat, jednak by tím porušily specifikaci.

bude fungovat smyšlený atribut a jeho zachycení všude?
Počínaje Explorerem 4. Možná i 3, teď přesně nevím, která verze začala podporovat getAttribute. Bude fungovat všude, kde je podpora getAttribute (čili v jazyku tvého kmene attr).
Kcko
Profil
Chamurappi:
Díky za objasnění, vzhůru do světa vlastních atributů.
ybznek
Profil
Díky za objasnění :)
Witiko
Profil
Mimochodem - specifikace HTML5 zmiňuje vlastní atributy s tím, že je stačí prefixnout předponou data-. Sice je jasné, že to funguje už nyní, a že přikývnutí od konzorcia je spíše symbolické, ale přesto jsem si myslel, že by to některým z vás mohlo ulehčit dilema z (ne)validity. :-)

Navíc je fajn mít jakžtakovou jistotu, že daný prefix nebude použitý. Přidávání vlastních atributů je jako rozšiřování prototypů vestavěných objektů v javascriptu - člověk si nikdy nemůže být 100% jistý, že nepřepisuje nějakou budoucí funkci / atribut. Zvláště potom, činí-li tak v jazyce anglickém.

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0