| Autor | Zpráva | ||
|---|---|---|---|
| gardener Profil |
#1 · Zasláno: 29. 3. 2010, 00:25:00
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 |
#2 · Zasláno: 29. 3. 2010, 02:45:21
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 |
#3 · Zasláno: 29. 3. 2010, 09:59:09
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 |
#4 · Zasláno: 29. 3. 2010, 14:24:09
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 |
#5 · Zasláno: 29. 3. 2010, 14:42:26
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. |
||
|
Časová prodleva: 16 let
|
|||
0