Autor | Zpráva | ||
---|---|---|---|
Jcas Profil |
#1 · Zasláno: 14. 6. 2014, 12:43:37
Mám
select , který volá JS událostí onchange .
Když se zvolí hodnota "jiná" (nová, přidat), tak by to mělo uvolnit input-text. Funkci předávám 3 parametry: 1. 'this' - objekt select 2. hodnota selecktu, která uvolní input 3. id inputu. function zmenaII(policko, vybrano, id) { var hodnota = policko.options[policko.selectedIndex].value; var prvek = document.getElementById(id); prvek.disabled=hodnota==vybrano?false:true; } Nyní bych ale potřeboval uvolnit 3 inputy = 3 id naráz. Ale chtěl bych, aby FC fungovala i na jeden input (volám ji i v jiných případech). Nějak nevím, jak na to. Poradíte prosím. Nevím, jestli lze třeba na onchange zavolat FC 3* pokaždé s jiným id. |
||
juriad Profil |
Co něco takového:
http://kod.djpw.cz/awdb |
||
Jcas Profil |
#3 · Zasláno: 14. 6. 2014, 15:52:26
Dík - super.
Když jsem na to kouknul, tak jsem mi prolétlo hlavou - "ty ole, tomu vůbec nerozumím. Ale když si to člověk projde řádek po řádku a koukne na net, co která metoda dělá, tak to lze pochopit. Trochu nechápu, proč všem nastavuješ atribut "dependets". JS nemá něco jako isset? Jo a vposledním řádku jsem změnil all[i] na show[i]. Já to tu s dovolením opíšu pro ostatní a také jestli jsem vše správně pochopil. (také jsem viděl, že ty kódy ve zkoušečkách časem mizí a tak jsem už mockrát narazil na to, že na starém tématu už jsem kód neviděl.) HTML - Option u, který má ovlivnit nějaký input předáme id inputu(ů) nastavením atributu "dependets" a dáme mu id inputu(ů)
- Voláme FC, když není vybrána žádná položka select u, abychom zajistili disabled všem input ům, které může nějaké option ovlivnit.
(při více selectů na stránce bude potřeba identifikovat select. Asi místo select použít "name" selectu) <form name="formular"> <select onchange="updateDependencies(this)" name="selekt"> <option value="a">A</option> <option value="b">B</option> <option value="c">C</option> <option value="d">D</option> <option value="_j" dependents="x,z">prvni-posledni</option> <option value="_d" dependents="y">prostredni</option> <option value="_o" dependents="x,y">prvni-druhy</option> </select> <br> <input id="x"> <br> <input id="y"> <br> <input id="z"> <script> updateDependencies(document.formular.selekt); </script> </form> JS function updateDependencies(selekt) { var all = [], show = [], i; for (i = 0; i < selekt.length; i++) { var dependents = selekt.item(i).getAttribute('dependents'); if (dependents === null) { continue; } if (selekt.selectedIndex == i) { show = show.concat(dependents.split(/,/)); } all = all.concat(dependents.split(/,/)); } // disable all for (i = 0; i < all.length; i++) { document.getElementById(all[i]).disabled = true; } // (re)enable those for the selected item for (i = 0; i < show.length; i++) { document.getElementById(show[i]).disabled = false; } } Projdem všechny prvky (optiony) selectu for (i = 0; i < selekt.length; i++) Všem nastavíme atribut "dependets" a pokud je roven "null" (tedy nemá nastaveny id input u(ů)), tak skočíme pomocí continue; na další průběh cyklu.
var dependents = selekt.item(i).getAttribute('dependents'); if (dependents === null) { continue; } Do pole show nastrkáme prvky-id inputu(ů) vybrané položky selectu
if (selekt.selectedIndex == i) { //položka selctu je vybrána show = show.concat(dependents.split(/,/)); } all dependents.split(/,/) funguje jako explode v php. rozdělí řetězec a udělá z toho pole.
V případě optionu _j : [0]=>'x' a [1]=>'z'
show.concat() zajistí přidání prvků pole do pole show. Budeme mít tedy show[0]=>'x' a show[1]=>'z' .
V případě vybrané položky _d bude mít show jeden prvek. show[0]=>'y' .
Totéž provedeme s polem all , ale tentokrát tam dáme všechny hodnoty "dependets" od všech option ů, které ho mají nastaveno.
(tady asi dochází k duplicitě, ale to asi ničemu nevadí) all = all.concat(dependents.split(/,/)); Projdeme všechny prvky pole all a pro každý input , jehož id je uloženo v poli nastavíme disabled .
for (i = 0; i < all.length; i++) { document.getElementById(all[i]).disabled = true; } A na závěr projdeme pole naplněné vybranou položkou selectu a pro každý input , jehož id je uloženo v poli nastavíme disabled=false .
for (i = 0; i < show.length; i++) { document.getElementById(show[i]).disabled = false; } |
||
juriad Profil |
#4 · Zasláno: 14. 6. 2014, 21:40:33
Jcas:
Žádný atribut javascriptem nenastavuji, používám getAttribute, nikoli setAttribute. Pouze se ptám na jeho hodnotu a ta bude buď string nebo null, pokud atribut neexistuje. Jo tu chybu s show v posledním cyklu jsem si uvědomil až po odeslání. Tady krásně vidíš ukázku kódu, který je dostatečně obecný, stará se o jedinou věc a je krátký, přehledný. Vidíš, že kód v HTML byl rozšířen jen decentně. |
||
Časová prodleva: 11 let
|
0