Autor | Zpráva | ||
---|---|---|---|
Silencer Profil |
#1 · Zasláno: 4. 7. 2008, 14:17:28
Mám menší problém s odchytením udalosti nad checkboxom.
Použil som onclick a vsetko fungovalo v pohode. Nakoľko je však tých checkboxov viac, chcel by som užívateľom umožniť zaškrtnúť všetky políčka naraz. Problém je však v tom, že síce sa políčka zaškrtnú, ale nevyvolá to požadovanú udalosť. Možno sa bude dať aj zmeniť priamo funkcia, ktorá sa zavolá po kliknutí na políčko, takže prikladám aj kódy: function ukazsa(form,meno,ktoreid) { if (form[meno].value=="ano") { document.getElementById(ktoreid).style.display="inline"; form[meno].disabled="true"; form[meno].style.display="none" } } Táto funkcia spôsobí to, že po kliknutí na zaškrtávacie políčko sa ukáže dovtedy skrytá vec: ... style="display:inline" onclick="ukazsa(this.form,this.name,'idnaceste' Zároveň sa však políčko aj vypne (aby sa neodosielalo formulárom a zmizne. No a tu je funkcia, ktorá zaškrtáva všetky políčka: function OznacVsetko(){ temp = document.formular.elements.length ; for (i=0; i < temp; i++) { if(document.formular.elements[i].checked == 1) {document.formular.elements[i].checked = 0; document.formular.btn.value = "Select All"; } else {document.formular.elements[i].checked = 1; document.formular.btn.value = "Deselect All"; } } } Vie niekto, či sa s tým dá niečo robiť? |
||
Joker Profil |
#2 · Zasláno: 4. 7. 2008, 14:40:44
Silencer
onclick to logicky nevezme, protože to je událost kliknutí na políčko a při změně políčka skriptem na něj nikdo nekliká. Zkusil bych událost onchange. |
||
Silencer Profil |
#3 · Zasláno: 4. 7. 2008, 14:51:20
Joker
Zkusil bych událost onchange. To som skúšal samozrejme, aj onselect a mnohé dalšie. Väčšina z nich neurobí nič aj pri manuálnom kliknutí. Konkrétne onchange reaguje až vtedy, keď manuálne zaškrtnem políčko a následne kliknem na niečo iné. Takže onchange nerieši problém. |
||
los Profil * |
#4 · Zasláno: 4. 7. 2008, 15:04:07
Pri zmene hodnoty JavaScriptom sa udalosti onclick, onchange a pod. nevolajú - keď to v skripte meníš, tak môžeš rovno zavolať tú funkciu, ktorú voláš v onclick.
|
||
jelc Profil * |
#5 · Zasláno: 4. 7. 2008, 15:15:49
No nestaci kdyz se v tom cyklu, ktery je zaskrtava vsechny zavola ukazsa(...) tak aby se chovala stejne jako pri kliknuti na checkbox?
|
||
Silencer Profil |
#6 · Zasláno: 4. 7. 2008, 21:13:09
jelc
Super nápad, myslím, že by to tak mohlo fungovať. Bude však problém zavolať vstupné premenné. function ukazsa(form,meno,ktoreid) { document.getElementById(ktoreid).style.display="inline"; form[meno].disabled="true"; form[meno].style.display="none" } |
||
Silencer Profil |
#7 · Zasláno: 6. 7. 2008, 23:28:01
Vie mi niekto pomôcť, ako zavolať tú funkciu OznacVsetko?
function OznacVsetko(){ temp = document.formular.elements.length ; for (i=0; i < temp; i++) { if(document.formular.elements[i].checked == 1) {document.formular.elements[i].checked = 0; document.formular.btn.value = "Select All"; } else {document.formular.elements[i].checked = 1; document.formular.btn.value = "Deselect All"; } } } function ukazsa(form,meno,ktoreid) { document.getElementById(ktoreid).style.display="inline"; form[meno].disabled="true"; form[meno].style.display="none" } |
||
jelc Profil * |
#8 · Zasláno: 7. 7. 2008, 09:04:25
tech zpusobu muze byt spousta, zalezi take na to jak je to ve strance umistene, pokud tomu rozumim prochazite vsechny checkboxy ve urcitem formulari
<pre> var formular = document.getElementsById('id_meho_formulare'); var boxes = formular.getElementsByTagName('checkbox'); var ids = ['ktoreid_1','ktoreid_2',.....'ktoreid_n'] // zaskrtne vsechny chekboxy a v pripade tech co nebyly zaskrtnute zavola funkci ukazsa function OznacVse(){ for(var i = 0; i < boxes.length;i++){ if(boxes[i].checked){ continue; } else { boxes[i].checked = true; ukazsa(formular,boxes[i],i) } } } // odkryje skryty prvek disabluje a skryje checkbox function ukazsa(my_form,my_box,id_or_number){ var ktoreid = isNaN(id_or_number) ? id_or_number : ids[id_or_number]; document.getElementById(ktoreid).style.display = 'inline'; box.disabled = true; box.style.display = 'none' } </pre> Samozrejmne ze id odkryvanych prvku se muze zjistovat jinak, napriklad muze byt ulozene v id checkboxu <input type="checbox" name="neco" id="chb_ktoreid" /> funkci ukazsa se bude predavat pouze formular a element na ktery se kliklo a spravne id se vyparsuje z id checkoxu: var id = box.id.split('_')[1] nebo nejak jinak ;) |
||
Silencer Profil |
#9 · Zasláno: 7. 7. 2008, 09:18:02
jelc
Z toho, čo si napísal a čo som skúšal ja som zistil, že nemám problém odkryť všetky elementy formulára. Problémom je to, že to čo chcem odkrývať je ako <div id="nejakeid"> .... </div>. Dá sa teda nejako to boxes.length nadefinovať, aby to zistilo všetky IDčka na stránke? |
||
jelc Profil * |
#10 · Zasláno: 7. 7. 2008, 09:44:17
v me ukazce jsou v boxes ulozene vsechny checkboxy v danem formulari (jako pole elementu), v poli ids jsou potom vsechna id odkryvanych prvku ve stejnem poradi v jakem jsou checkboxy, (pokud se generuji nejakym serverovym skriptem, nemel by byt problem vytvorit si odpovidajici pole), pokud to nelze, pouzil bych tu variantu, ze si checkbox ponese v sobe informaci o id prvku, ke kteremu se vztahuje, napriklad jeho id se bude skladat z nejakeho retezce a id pozadovaneho prvku a oddelene budou jednoznacnym identifikatorem, v ukazce dole je podtrzitko, zjistovat vsechna id ve strance je zbytecne komplikovane a myslim ze neni jednoduchy zpusob jak to zjistit.
takze funkce ukazsa by mohla vypadat takto: <div id="ktoreid"></div> <input type="checbox" name="neco" id="chb_ktoreid" onclick="ukazsa(this)"/> function ukazsa(checkbox){ mojeId = checkbox.id.split('_')[0]; // vrati 'ktoreid' document.getElementById(mojeId).style.display = 'inline'; checkbox.disebled = true; checkbox.style.display = 'none'; } ve funkci oznacVse se preda funkci ukazsa odpovidajic checkbox z pole boxes, |
||
jelc Profil * |
#11 · Zasláno: 7. 7. 2008, 09:45:56
Jeste bych dodal ze ve funkci oznacVse bych v podmince testoval spise nez checked vlastnost disabled, (myslim ze nekde byl problem se ctenim vlastnosti skrytych disablovanych formularovych prvku)
|
||
jelc Profil * |
#12 · Zasláno: 7. 7. 2008, 09:46:48
Oprava:
mojeId = checkbox.id.split('_')[1]; // vrati 'ktoreid' |
||
Silencer Profil |
#13 · Zasláno: 7. 7. 2008, 12:11:45
jelc
Ďakujem, pomohlo mi to. Keďže som nechcel premenovávať všetky DIVy, na začiatku som nadefinoval DIVy, ktoré sa majú zobraziť do premennej. Výsledkom je táto funkcia: function OznacVsetko(){ temp = document.mhformular.elements.length ; var ids = ["idname","idoc","iddept_num2","iddept_num","iddept_name","idcompany", "idvek", "idden","iddatum","idcas","idmiesto","idusek","idvozidlo","idnaceste", "idspolucestujuci", "idpocasie","idvozovka","idexterne_faktory","idvnutorne_faktory","id vyhnut_nehode", "idvina","idpricina","idzdravie","idskoda","idpc_nehody","idnajazden e","idukoncenie", "idpolicia","idpokuta","idrozhodnutie","idvp"] for (i=0; i < 31; i++) { document.getElementById(ids[i]).style.display="inline"; } for (i=0; i < temp; i++) { if (document.mhformular.elements[i].type=="checkbox") { document.mhformular.elements[i].disabled="true"; document.mhformular.elements[i].style.display="none"; } } document.getElementById("idbtn").style.display="none"; } Funkcia zobrazí všetky skryté DIVy, skryje checkboxy (keďže nechcem, aby ich opäť zaškrtávali) a ešte aj skryje tlačidlo, ktoré volá celú funkciu. Vrelá vďaka za pomoc! |
||
Časová prodleva: 16 let
|
0