Autor Zpráva
Petr_1
Profil
Dobrý den,

chtěl bych poprosit o radu, jak odkázat na prvek, který je označen []. V události "onclick" v níže uvedeném kódu potřebuji odkázat na input "datum" pro příslušný řádek. Díky moc.

<input type='text' name='datum[]' /> <input type='button' name='abc[]' onclick='displayDatePicker("datum", false,"ymd", "-");' />
<input type='text' name='datum[]' /> <input type='button' name='abc[]' onclick='displayDatePicker("datum", false,"ymd", "-");' />
Tori
Profil
Je to ve FAQ.
Petr_1
Profil
Děkuji. Trochu mě to posunulo, bohužel stále nevím, jak dostat konkrétní číslo - v ukázkovém příkladu vím, že element je v pořadí druhý, tedy má index 1 a mohu na něj odkázat. Já ale s těmi "řádky" manipuluji - přidávám, mažu. Takže bych potřeboval principiálně něco jako this.id.order, protože jinak mi to vrátí vždy abc [] ...
_es
Profil
Petr_1:
tedy má index 1 a mohu na něj odkázat.
Ako inak by si ešte chcel odkázať na element, kde vznikla udalosť?
Na to máš predsa objekt this.
Petr_1
Profil
Jde o to, jak zjistit index buttonu, na který bylo kliknuto - pak to id budu moci použít. This.id vrátí hodnotu abc[], která je společná pro všechny buttony...
_es
Profil
Petr_1:
This.id vrátí hodnotu abc[], která je společná pro všechny buttony...
Asi myslíš this.id, to je atribút id, ktorý by mal byť pre každý element jedinečný. Ak jedinečný nie je, tak treba zabezpečiť, aby jedinečný bol.
Textovému reťazcu "abc[]" by sa mal rovnať výraz this.name, čo je niečo iné ako this.id.
Petr_1
Profil
Z určitých důvodů potřebuji mít všechny prvky pojmenované např. abc[], viz vstupní příspěvěk. Jde o to, jestli existuje možnost zjistit (např. přes this) pořadí konkrétního prvku v poli všech těchto prvků. Tyto prvky lze projít javascriptem, kde pořadová čísla mají, takže pátrám po možnosti zjistit toto číslo při kliknutí na konkrétní prvek.
_es
Profil
Petr_1:
Z určitých důvodů potřebuji mít všechny prvky pojmenované např. abc[], viz vstupní příspěvěk.
„Pomenované“ myslíš atribút name?
Môžeš im ešte dať aj atribút id.
Z hľadiska dát je lepšie mať nejako ten „riadok“ nejako priamo identifikovateľný, než sa riadiť poradím riadku voči iným riadkom, aj keď sa aj to dá a ak pohľadáš, nájdeš na to metódy DOM.
Ak by si použil naozajstnú tabuľku (<table>), tá má na to priamejšie metódy, viď https://developer.mozilla.org/en/DOM/tableRow, no lepšie je neriadiť sa pozíciou riadka.
Petr_1
Profil
Doufal jsem, že bude možnost nějak rozumně zjistit přímo pořadí elementu v poli prvků, ale možnost spočítat to podle řádků tabulky moji záležitost asi vyřeší, takže to udělám tak. Díky.

Každopádně kdyby někdo věděl, jak při kliknutí na některý z níže uvedených buttonů zjistit jeho pořadí v poli abc, byl bych vděčný :-)

<input type='text' name='datum[]' /> <input type='button' name='abc[]' onclick='displayDatePicker("datum", false,"ymd", "-");' />
<input type='text' name='datum[]' /> <input type='button' name='abc[]' onclick='displayDatePicker("datum", false,"ymd", "-");' />
<input type='text' name='datum[]' /> <input type='button' name='abc[]' onclick='displayDatePicker("datum", false,"ymd", "-");' />
okolojdouci
Profil *
Nevím, jestli ti to pomůže, ale párkrát jsem v podobné situaci použil to, že jsem ty inputy nedal jako pole, ale přidal jim do name ID z databáze, odkud se ty jednotlivé řádky braly a pak předal to ID pomocí nějakého hidden inputu.
Vypadá to drsně, ale opravdu jsou situace, kdy to není čuňárna. Jestli o tom někdo bude pochybovat, pokusím se popsat příklad :)
Petr_1
Profil
Já právě ty inputy tvořím javascriptem přes duplikování vzoru, takže jim každému jiné id dát nemůžu. Leda že bych ho upravil dodatečně po vytvoření taky javascriptem, ale to už mi přijde divné ...
_es
Profil
Petr_1:
Já právě ty inputy tvořím javascriptem přes duplikování vzoru, takže jim každému jiné id dát nemůžu.
To je čo za divný argument?
Tak si sprav „duplikovanie vzoru“, nech už tým myslíš hocičo, s atribútom id ako parametrom „vzoru“.
Každý záznam v databáze by mal byť nejako jedinečný, preto nie je zisťovanie čísla riadku záznamu vo výpise na identifikáciu záznamu dobrý nápad.
Petr_1
Profil
Toto nemá s databází nic společného... S použitím parametrů při duplikaci přes DOM funkce jsem ještě nesetkal.
Tori
Profil
Petr_1:
A nešlo by najít párový input podle toho, že ty dva inputy (a žádné další se stejným name) mají shodného rodiče (asi <tr>)?
Petr_1
Profil
Nějakou fintu jsem vymyslel, mě šlo o to, jestli jde to nejde čistě ...

Moje finta je o tom, že
1) před každý button dám hidden input
2) při kliknutí na button tomuto hiddnu přiřadím value pomocí previeusElement
3) projdu prvky a podle value dostanu požadované pořadí
4) vrátím value hiddnu na výchozí

Snad to bude fungovat :-)

To se shodným rodičem si moc nedovedu představit, js mi tak nejde ...
_es
Profil
Petr_1:
Akosi nerozumiem účelu toho celého.
To poradie získaš na základe čoho?
Ak to je na základe hodnôt vo formulárovom poli, prečo nepristupuješ normálne k hodnotám v poli?
Na čo ten skrytý element, prečo neprepíšeš normálne v JS vlastnosť id?
Pokús sa normálne zrozumiteľne detailne popísať, o čo sa vlastne pokúšaš.
Petr_1
Profil
Myslím že to je zřejmé z příspěvků, popíši:

Uživatel vkládá předem neznámý počet položek, má tlačítko "další položka" a "smazat položku".
Tlato tlačítka pracují s childNodes, duplikují a mažou např. takovýto řádek:

<input type='text' name='datum[]' /> <input type='button' name='abc[]' onclick='displayDatePicker("datum", false,"ymd", "-");' />

U buttonu "abc" potřebuji na click zavolat funkci "displayDatePicker" s odkazem na input "datum" v tom samém řádku, ve kterém se nachází button, na který bylo kliknuto.
_es
Profil
Petr_1:
duplikují a mažou např. takovýto řádek
U buttonu "abc" potřebuji na click zavolat funkci "displayDatePicker" s odkazem na input "datum" v tom samém řádku, ve kterém se nachází button, na který bylo kliknuto.
Ale na také funkčnosti nepotrebuješ vôbec vedieť poradie riadku kde sa na niečo kliklo.
Ak je do ovládača udalosti onclick priradená funkcia, tak v tej funkcii je this už priamo ten potrebný objekt elementu.
A pomocou metód DOM sa môžeš odkázať na susedný či nadradený element a pod.
Alebo môžeš využiť aj „prebublávanie“ udalosti, oba spôsoby sú použité v tomto vlákne, stačí si len prispôsobiť jeden z tých dvoch spôsobov, v tomto prípade bude asi vhodnejšie vychádzať z Chamurappiho kódu.
Petr_1
Profil
O něco takového jsem se pokoušel, ale přijde mi, že funkce, kterou volám, chce přímo jméno elementu. Anebo dělám něco špatně :-) Prosím tedy o popostrčení, viz kód dole, děkuji.


<input type='text' name='datum[]' /> <input type='button' name='petr[]' value='D' onclick='displayDatePicker(this.previousSibling, false,"ymd", "-");' />
_es
Profil
Petr_1:
Prosím tedy o popostrčení, viz kód dole, děkuji.
Ak budeš vychádzať z Chamurappiho kódu, tak len v tej funkcii potrebuješ zistiť na aký element sa kliklo - z premennej target a podľa toho spraviť nejakú akciu.
Alebo z toho môjho kódu priradíš na začiatku cez cyklus všetkým potrebným tlačidlám príslušné funkcie - ovládače udalostí a tiež v prípade, že sa riadok pridá. Akurát sa namiesto target odkážeš na this.
Atribúty onclick v HTML kóde ani v jednom prípade nepotrebuješ, všetko napíšeš v <script>.
Petr_1
Profil
Pořád mi není jasné, jak se vyhnu nutnosti zavolat funkci displayDatePicker jinak než s namem prvku, který vyžaduje. Tuto funkci jsem nepsal já, je externí, takže bych ji nechtěl přepisovat a pokud jsem to dobře pochopil, tak ona v parametru jméno elementu vyžaduje...
_es
Profil
Petr_1:
Tuto funkci jsem nepsal já, je externí, takže bych ji nechtěl přepisovat a pokud jsem to dobře pochopil, tak ona v parametru jméno elementu vyžaduje...
Stačí ti ju len upraviť tak, aby mala ako argument nie meno elementu, ale priamo objekt elementu.
Petr_1
Profil
Tak nakonec mi požadovanou funkčnost napsal kamarád, můj problém to stejně nevyřešilo, takže jsem si napsal vlastní fci na výběr datumu.

Přikládám fci na zjištění pořadí stisknutého buttonu s jménem s [], pokud by to někdo použil :-) Šlo by tu asi napsat lépe, ale jak říkám, nakonec jsem to nevyužil, takže jsme to neladili.


<script type="text/javascript">

function kolikatyJsem(button){
var inputs = document.getElementsByTagName("INPUT");
var counter = 0;
if (inputs.length && inputs.length>0){
for (var i=0,l=inputs.length;i<l;i++){
if (inputs[i].type=="button" && inputs[i].className=="butt"){
if (inputs[i]==button){
alert(counter);
}
counter ++;
}
}
}
}

</script>

<input type="button" name="abc[]" class="butt" onclick="kolikatyJsem(this);" />
<input type="button" name="abc[]" class="butt" onclick="kolikatyJsem(this);" />
_es
Profil
Petr_1:
Přikládám fci na zjištění pořadí stisknutého buttonu s jménem s [], pokud by to někdo použil
Stále si dostatočne nezdôvodnil, že niečo také vôbec potrebuješ a nedáš si povedať, že je lepšie aplikáciu napísať tak, aby to nebolo treba zisťovať.
Nevhodne napísaná skopírovaná funkcia, ktorej úprava by trvala asi tak minútu nie je dostatočný dôvod.

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:

0