Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
janeklass
HV vaatleja
liitunud: 13.05.2009
|
26.12.2009 22:26:11
checkbox enable disable javascript |
|
|
Tere mul sihuke küsimus et kuidas ma saaks checkboxile panna linnukesed ja ära võtta ühe ja sama nupuga.
endal kood praega sihuke:
js:
function tseki(id){
vorm = document.getElementById(id).elements;
for(x in vorm){
if(vorm[x].type == "checkbox"){
vorm[x].checked = "true";
}
}
}
HTML:
<form id="vorming1">
<input type="checkbox"><br>
<input type="checkbox"><br>
<input type="checkbox"><br>
<input type="checkbox"><br>
<input type="checkbox"><br>
</form>
<input type="button" onClick=tseki("vorming1") value="Linnukesed k?ikidesse">
See kood paneb linukesed aga ära ei võta,aga tahaks et sama nupp võtaks ned ära ka.
|
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
i8080
Kreisi kasutaja

liitunud: 15.03.2002
|
27.12.2009 01:02:43
|
|
|
...
if(vorm[x].type == "checkbox")
{
if (vorm[x].checked == true)
vorm[x].checked = false;
else
vorm[x].checked = true;
}
...
|
|
|
Kommentaarid: 169 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
151 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
27.12.2009 01:14:10
|
|
|
Kui tahad, et su kood ka IE peal t öötaks (võimalik, et veel mõni teine browser) unusta selline for kohe ära
IE ei ole x number vaid mingi veider kirje.
Kasuta tava loendurit
for(i=0;i<vorm.length;i++){ |
_________________

viimati muutis andrusny 27.12.2009 01:18:16, muudetud 1 kord |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
27.12.2009 01:17:38
|
|
|
"var x" lahendaks ka probleemi.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
27.12.2009 01:23:18
|
|
|
proovisin, ei lahenda, ma vaatasin, mis see x on seal see on mingi jura. Midagi taolist, siin on tema näidiskoodi x välja toodud IE peal
tsitaat: |
nextSiblingonresizeendonrowenteraria-haspopupchildNodesondragleavecanHaveHTMLonbeforepasteondragoveronbeforecopyaria-disabledonpagerecordNumberpreviousSiblingnodeNameonbeforeactivateaccessKeycurrentStylescrollLeftonbeforeeditfocusoncontrolselectaria-hiddenonblurhideFocusclientHeightstyleonbeforedeactivatediraria-expandedonkeydownnodeTypeondragstartonscrollonpropertychangeondragenteridaria-levelonrowsinsertedscopeNamelangonmouseuparia-busyoncontextmenulanguagescrollTopoffsetWidthonbeforeupdateonreadystatechangeonmouseenterfiltersonresizeisContentEditablearia-checkedaria-readonlyoncopyonselectstartscrollHeightonmoveondragendonrowexitlastChildaria- |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
27.12.2009 01:30:26
|
|
|
i8080 kirjutas: |
...
if(vorm[x].type == "checkbox")
{
if (vorm[x].checked == true)
vorm[x].checked = false;
else
vorm[x].checked = true;
}
...
|
|
Postisin siin ennist ise sama kuid post läks delete, sest seee kood lihtsalt "vahetab" checkboxi checked staatud. Aga kui kasutaja juba mõne on chekkinud, siis ta ei tühjenda neid ära vaid "vahetab" need lihtsalt unchecked vastu ja ülejäänud checkib ära.
|
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
i8080
Kreisi kasutaja

liitunud: 15.03.2002
|
27.12.2009 01:59:20
|
|
|
no kui tahta peensust ja täiust taga ajama hakata, siis läheb asi suht pikaks ja segaseks kätte ära ja küsija võib sellega hiljem ise edasi tegelda.
selleks peaks kasutaja poolt tehtud klikkide tarvis kas eraldi input-hidden väljasid hoidma või eraldi muutujaid vms arrayd, et kasutaja poolt juba tehtud valikuid mitte override-da. see selleks...
algsest teema küsimusest lähtudes ja siin vahepealseid IE soovitusi arvesse võttes ehk saab ka sedasi
var checked = false;
function tseki(id)
{
if (checked)
checked = false;
else
checked = true;
vorm = document.getElementById(id).elements;
for(i=0; i < vorm.length; i++)
{
var el = vorm[i];
if(el.type == "checkbox")
{
el.checked = checked;
}
}
}
|
|
|
Kommentaarid: 169 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
151 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
27.12.2009 02:24:29
|
|
|
Alustuseks on su praeguses koodis mitmeid probleeme, mis küll hetkel ei mõjuta su koodi toimimist, kuid mis pikemas perspektiivis võivad valusalt kätte maksta, kui sa neile varakult tähelepanu ei pööra.
- Trepi oma koodi. Treppimata kood lihtsalt pole aktsepteeritav. Punkt.
- Uute muutujate defineerimisel tuleks alati kirjutada muutuja nime ette var, et defineerida see kohaliku muutujana - vastasel juhul tekitab JavaScript globaalse muutuja ning palju globaalseid muutujaid pole kunagi hea.
- == operaatori asemel kasuta alati ===, esimese kasutamisel teeb JavaScript tüübiteisendusi, mille tulemused pole sageli intuitiivsed, näiteks "01" == true, aga "02" != true.
- "true" asemel kasuta ikka true.
- for (... in ...) { tsükkel on mõeldud objektide jaoks, massiivide puhul kasuta ikka vana head for (...; ...; ...) { tsüklit. Esimese kasutamisel massiividega võivad juhtuda kummalised asjad - mõnikord mõnes brauseris töötab, teinekord jälle teises brauseris mitte.
- .elements asemel kasuta .getElementsByTagName() meetodit, et pärida vaid seda tüüpi elemendid, mis sind tegelikult huvitavad.
Eelnevaid nõuanded järgides oleks su kood umbes selline:
javascript:
|
function tseki(id) { var inputs = document.getElementById(id).getElementsByTagName("input"); for (var i = 0; i < inputs.length; i++) { if (inputs[i].type === "checkbox") { inputs[i].checked = true; } } }
|
See funktsioon muidugi üksnes linnutab ära kõik kastikesed, sest checked atribuudile omistatakse true. Võiksid kirjutada samasuguse funktsiooni, kus true asemel oleks false - see siis eemaldaks kõik linnukesed. Aga kahe sellise pea-aegu samasuguse funktsiooni kirjutamine oleks muidugi tobe. Palju parem oleks lihtsalt lisada parameeter, mis määraks, kas linnukesed lülitatakse sisse või välja. Näiteks nii:
javascript:
|
function setChecked(id, checked) { var inputs = document.getElementById(id).getElementsByTagName("input"); for (var i = 0; i < inputs.length; i++) { if (inputs[i].type === "checkbox") { inputs[i].checked = checked; } } }
|
Sellisest funktsioonist piisaks, kui sul oleks tarvis kahte nuppu, üht sisse- ja teist väljalülitamiseks:
<input type="button" onClick='setChecked("vorming1", true);' value="Linnukesed sisse">
<input type="button" onClick='setChecked("vorming1", false);' value="Linnukesed välja"> |
Sul aga on tarvis vaid ühte nuppu, mis esimesel vajutamisel lülitaks kõik sisse, teisel korral kõik välja, siis jälle kõik sisse jne. Tavaliselt nimetatakse taolist funktsionaalsus sõnaga "toggle", ning ühe lisamuutuja ja juba olemasoleva setChecked() abil on sellist funktsiooni üsna lihtne kirjutada:
javascript:
|
var checked = false; function toggle(id) { checked = !checked; // pöörame muutuja väärtuse vastupidiseks setChecked(checked); }
|
See töötab, kuid sel on üks tõsine probleem, kuna muutuja checked on globaalne, siis ei toimi see kood juhul kui lehel on rohkem kui üks kastikeste grupp mida on tarvis sisse-välja lülitada. Selle lahendamiseks on mitmeid viise, kuid alustuseks on vast üks lihtsamaid järgmine, kus muutuja checked väärtuseks pole mitte lihtne true/false vaid objekt, milles peetakse meeles iga ID kohta true/false väärtus:
javascript:
|
var checked = {}; // uus tühi objekt function toggle(id) { // kui id-nimelist välja veel pole, siis saab see väärtuseks true // kui väli olemas, siis lihtsalt pöörame selle väärtuse vastupidiseks checked[id] = !checked[id]; setChecked(checked[id]); }
|
Nagu mikk36 juba mainis, siis jQuery abil on seda kõike vast palju lihtsam teha. Samas alustuseks kulub ära endale ka mõningad JavaScripti põhitõed selgeks teha.
_________________ Mõistus otsas? Pane pinusse... |
|
Kommentaarid: 24 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
23 |
|
tagasi üles |
|
 |
Negaal
HV vaatleja

liitunud: 03.10.2008
|
28.12.2009 20:06:13
|
|
|
miks ma kasutan jquerit?
var hihi = 0;
$('#päästik').click(function(){
hihi++
$('.alluvad').attr('checked', hihi%2=0?false:true)
})
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
30.12.2009 17:55:19
|
|
|
Siin paljud näited ja soovitused on üks ühest otsast kipakas ja teine teisest otsast (ka nene poolt toodud põhjalikud näited on minu arvates ülepingutamine).
function checkUncheckAll(cb) {
if(!cb) return;
var f = cb.form;
var state = cb.checked;
for(var i = 0; i < f.elements.length; i++) {
var elem = f.elements[i];
if(elem.type.toLowerCase() == 'checkbox') {
elem.checked = state;
}
}
}
|
Üks lihtne funktsioon, ei mingeid global muutujaid, ei mingit spetsiaalset vormi id etteandmist, eelduseks on see et vastav checkbox mida klikitakse on sama formi sees (korrektses html koodis peavadki formi input elemendid asuma formi tagide vahel). Selleks, et vältida submittimisel selle toggle checkboxi nime ja väärtuse kaasa minemist, peab selle checkboxi name ja value atribuudid olema seadistamata. Lisaks on automaatselt kaitstud ka need juhud, kui keegi geniaalselt/kogemata otsustab html's panna type="CHECKBOX" mispeale päris mitmed eelpool toodud näited sellist checkboxi checkboxiks ei tunnistaks.
Vastav html oleks siis:
<form>
<input type="checkbox" name="midagi1" /><br />
<input type="checkbox" name="midagi2" /><br />
<input type="checkbox" name="midagi3" /><br />
<input type="checkbox" name="midagi4" /><br />
<input type="checkbox" name="midagi5" /><br />
<input type="checkbox" onchange="checkUncheckAll(this)" />
</form>
|
NB! onclick asemel on parem kasutada checkboxi puhul onchange, kuna sellisel juhul on automaatselt kaetud kõik muud juhud mismoodi checkboxi muuta annaks (näiteks <label for="checkboxi_id">kliki mind</label> abiga mugavamaks tegemine)
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
|