Autor Zpráva
gardener
Profil
Zdravím,
chtěl bych se zeptat na jednu věc ve formu mám jeden dynamicky plněný selectbox a chtěl bych přistupovat k textu jednotlivých položek a ty pak porovnávat
zkoušel jsem přistupovat k prvku pomocí name formu a selcetboxu ale něco dělám špatně
(zatim pristupuji tedy jen k value, k textu neumim)

function hello() {
//Chci ziskat hodnotu a na zaklade toho nezobrazit/zobrazit jiny prvek	
document.getElementById('ukaz').style.display=(document.company_add.data[Company][market_segment_id].value=='4')?'block':'none';
	
}

Select vypada takto
<select name="data[Company][market_segment_id]" onChange="hello()" id="CompanyMarketSegmentId">
<option value="1">Pohostinstvi</option>
<option value="2">Rucni vyroba</option>
<option value="3">Cestovni ruch</option>
<option value="4">jine</option>
</select>


Diky za kazdou radu
sysel
Profil
Trocha nepochopení se dá snadno napravit. Prvek <select> by měl být uvnitř nějakého elemnetu <form>. Pak se dá takovému <select>u přistupovat jako k document.forms.formName.selectName. Ale jednak nevím jistě, zda je takový přístup obecný (mohou být odlišnosti v různých browserech) a jednak v takovém případě nemůže jméno <select>u obsahovat hranaté závorky [] protože ty jsou pak vyhodnoceny jako index pole.

Nicméně ve Vašem případě máte ještě druhou spolehlivě fungující možnost:

function hello() {
//Chci ziskat hodnotu a na zaklade toho nezobrazit/zobrazit jiny prvek    
document.getElementById('ukaz').style.display=(document.getElementById('CompanyMarketSegmentId').value=='4')?'block':'none';
Chamurappi
Profil
Reaguji na sysla:
(mohou být odlišnosti v různých browserech)
Ani ne. Je spolehlivý mnohem delší dobu než document.getElementById.

jednak v takovém případě nemůže jméno <select>u obsahovat hranaté závorky []
Proč by ne? Může obsahovat cokoliv, klidně i tečky a uvozovky…


Reaguji na gardenera:
něco dělám špatně
Pole document.company_add.data asi neexistuje, proměnné Company a market_segment_id předpokládám také v JS nemáš definované.

Ke členům objektu jde přistupovat nejen skrz objekt.vlastnost, ale i zápisem objekt["vlastnost"], který není díky své řetězcové nátuře omezený pravidly pro identifikátory. Ty chceš přistupovat ke členu, který se jmenuje přesně „data[Company][market_segment_id]“, použij tedy ten postup se řetězcem.

Proč si objekt dotyčného <select>u nepředáváš jako argument při volání funkce hello?
<select … onChange="hello(this)">
sysel
Profil
sysel:
v takovém případě nemůže jméno <select>u obsahovat hranaté závorky []
Myslel jse to, tak, že se budou chápat ve smyslu indexu nějakého Array, což však zřejmě nejsou (možná pro zpracování v PHP ano), ale Javascript je tak vyhodností a pak platí poznámka:

Chamurappi:
proměnné Company a market_segment_id předpokládám také v JS nemáš definované

(ne)Jednou už zde v diskusi varování na toto téma zaznělo. Tak se tomu sám vyhýbám popřípadě se snažím takové názvy používat opatrně. Kupříkladu PHP si řadu stejných ...name="cena[]"... přebere a oindexuje automaticky, ale pro JS to jsou shodná jména, což je nepoužitelné pro určení elementu formuláře.

Jo to this je samozřejmě nejlepší.
Chamurappi
Profil
Reaguji na sysla:
(ne)Jednou už zde v diskusi varování na toto téma zaznělo.
Ano, odpovídám již poněkolikáté, že to jde snadno vyřešit jiným druhem zápisu.

PHP si řadu stejných ...name="cena[]"... přebere a oindexuje automaticky
Jiné jazyky si to dovedou přebrat i bez hranatých závorek.

pro JS to jsou shodná jména, což je nepoužitelné pro určení elementu formuláře
Pro JS to je pole s názvem „cena[]“. Není s tím žádný problé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:

Prosím používejte diakritiku a interpunkci.

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

0