/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Sætte radioknapper til 1
Fra : Martin


Dato : 11-04-06 04:24

Jeg har et lille problem.

Jeg vil gerne have sat nogen radio knapper til ja, når man trykker på en
button.

Desværre kan jeg kun fodre javascriptet med et array af de knapper jeg
vil have trykket, og altså ikke ét navn på en hel gruppe knapper.

Mit array kunne se sådan her ud

radioknap_1
radioknap_2
radioknap_3
radioknap_4
osv.

Jeg har prøvet mig lidt frem med

function SetAllChecked(FieldName, CheckValue)
{
var countCheckBoxes = FieldName.length;
for(var t = 0; t < countCheckBoxes; t++) {
var objCheckBoxes = document.getElementById('FieldName[i]t');
var counter = objCheckBoxes.length;
if(!counter) {
objCheckBoxes.checked = CheckValue;
else {
for(var s = 0; s < counter; s++)
objCheckBoxes[s].checked = CheckValue;
}
}
}

Min button ser således ud:
<input type="button" name="knap" value="alle til ja"
onClick='SetAllChecked(array(radioknap_1,radioknap_2,radioknap_3,radioknap_4),1)'
/>

Min fejl lyder:
Error: array is not defined

Hvordan definerer man så et array i en knap?

Er der en der kan hjælpe mig mon?

 
 
Lasse Reichstein Nie~ (11-04-2006)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 11-04-06 12:17

Martin <news@natten-i.dk> writes:

> Jeg vil gerne have sat nogen radio knapper til ja, når man trykker på
> en button.

Længere nede ser det ud til at du mener checkboxe, ikke radioknapper.
Det gør jo lidt af en forskel, da kun en radioknap i hver gruppe kan
være trykket ind. Jeg vil antage at det er checkboxe du mener.

> Desværre kan jeg kun fodre javascriptet med et array af de knapper jeg
> vil have trykket, og altså ikke ét navn på en hel gruppe knapper.

> Mit array kunne se sådan her ud
>
> radioknap_1
> radioknap_2
> radioknap_3
> radioknap_4
> osv.

Det er altså et array af strenge der er navne (id'er?) på elementer.

Det ville være hjælpsomt at kunne se siden (et link til en levende
side, eller bare lidt kode der viser formens struktur).

> Jeg har prøvet mig lidt frem med
>
> function SetAllChecked(FieldName, CheckValue)
> {
> var countCheckBoxes = FieldName.length;
> for(var t = 0; t < countCheckBoxes; t++) {
> var objCheckBoxes = document.getElementById('FieldName[i]t');

Her skal argumentet nok ikke i anførselstegn:

var objCheckBoxes = document.getElementById(FieldName[i]);

Det ser ud som om du forventer at få mere end et element tilbage.
Da getElementById altid kun returnerer et objekt (da id på elementer
skal være unikke i dokumentet), så er det nok noget andet du skal
have fat i, fx document.getElementsByName?

> var counter = objCheckBoxes.length;
> if(!counter) {
> objCheckBoxes.checked = CheckValue;
> else {
> for(var s = 0; s < counter; s++)
> objCheckBoxes[s].checked = CheckValue;
> }
> }
> }
>
> Min button ser således ud:
> <input type="button" name="knap" value="alle til ja"
> onClick='SetAllChecked(array(radioknap_1,radioknap_2,radioknap_3,radioknap_4),1)'
> />
>
> Min fejl lyder:
> Error: array is not defined
>
> Hvordan definerer man så et array i en knap?

Lige som alle andre steder, enten med Array-konstruktoren eller som en
literal.

new Array("radioknap_1", "radioknap_2", "radioknap_3", "radioknap_4")
eller
["radioknap_1", "radioknap_2", "radioknap_3", "radioknap_4"]

Din kode kommer dog ikke til at virke af det alene.

Prøv med:

function setAllChecked(form, names, value) {
for (var i = 0; i < names.length; i++) {
var elem = form.elements[names[i]];
if (typeof elem.length == "number") {
for (var j = 0; j < elem.length; j++) {
elem[j].checked = value;
}
} else {
elem.checked = value;
}
}
}

som kaldes med:

<input type="button" value="alle til ja"
onclick='setAllChecked(this.form,
["radioknap_1", "radioknap_2", "radioknap_3", "radioknap_4"],
true)' >

Her antages det at "radioknap_1" er navnet på form-controllen (i.e.,
name-attributten, ikke id-attributten), og at det hele er inde i en form.
Det gør ting meget nemmere.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Martin (11-04-2006)
Kommentar
Fra : Martin


Dato : 11-04-06 20:21

Lasse Reichstein Nielsen wrote:
> Martin <news@natten-i.dk> writes:
>
>> Jeg vil gerne have sat nogen radio knapper til ja, når man trykker på
>> en button.
>
> Længere nede ser det ud til at du mener checkboxe, ikke radioknapper.
> Det gør jo lidt af en forskel, da kun en radioknap i hver gruppe kan
> være trykket ind. Jeg vil antage at det er checkboxe du mener.

Nej det er faktisk radioknapper.

Fx sådan her

Må brugeren...
Skrive nyheder
[X] Ja [ ] Nej

Ændre nyheder
[ ] Ja [X] Nej

og sådan går det lystigt derned af.

Selvfølgelig har hvert par ja/nej radio'er samme name og id attribut.


>
>> Desværre kan jeg kun fodre javascriptet med et array af de knapper jeg
>> vil have trykket, og altså ikke ét navn på en hel gruppe knapper.
>
>> Mit array kunne se sådan her ud
>>
>> radioknap_1
>> radioknap_2
>> radioknap_3
>> radioknap_4
>> osv.
>
> Det er altså et array af strenge der er navne (id'er?) på elementer.

Både name og id'er ja.


>
> Det ville være hjælpsomt at kunne se siden (et link til en levende
> side, eller bare lidt kode der viser formens struktur).

Desværre er det ikke muligt at vise, da det kræver at man er logget ind
for at se siden.

Men i store dele ser det således ud.

Må brugeren...
<form action=".." method="post" id="edit_rights">
Oprette nyheder
<input type="radio" id="radioknap_1" name="radioknap_1" value="1"> Ja
<input type="radio" id="radioknap_1" name="radioknap_1" value="0"> Nej

Slette nyheder
<input type="radio" id="radioknap_2" name="radioknap_2" value="1"> Ja
<input type="radio" id="radioknap_2" name="radioknap_2" value="0"> Nej
....
</form>

>
> Her skal argumentet nok ikke i anførselstegn:
>
> var objCheckBoxes = document.getElementById(FieldName[i]);
>
> Det ser ud som om du forventer at få mere end et element tilbage.
> Da getElementById altid kun returnerer et objekt (da id på elementer
> skal være unikke i dokumentet), så er det nok noget andet du skal
> have fat i, fx document.getElementsByName?

Puhaa.. jeg er desværre ikke så stærk i den "nye" metode når man skal
hente objekter i javascript, så jeg ved ikke rigtig hvad forskellen er.

> function setAllChecked(form, names, value) {
> for (var i = 0; i < names.length; i++) {
> var elem = form.elements[names[i]];
> if (typeof elem.length == "number") {
> for (var j = 0; j < elem.length; j++) {
> elem[j].checked = value;
> }
> } else {
> elem.checked = value;
> }
> }
> }

Er der ikk et eller andet med at når man bruger form.elements så skal
formen også have en name attribut? - og det har den ikke, da det jo ikke
findes i strict standarden

>
> som kaldes med:
>
> <input type="button" value="alle til ja"
> onclick='setAllChecked(this.form,
> ["radioknap_1", "radioknap_2", "radioknap_3", "radioknap_4"],
> true)' >
>
> Her antages det at "radioknap_1" er navnet på form-controllen (i.e.,
> name-attributten, ikke id-attributten), og at det hele er inde i en form.
> Det gør ting meget nemmere.

Så overholder vi ikke w3c strict mere, og det vil jeg altså :)
Bare for at vise at det sagtens kan lade sig gøre.

Erik Ginnerskov (11-04-2006)
Kommentar
Fra : Erik Ginnerskov


Dato : 11-04-06 23:18

Martin wrote:

>>> Jeg vil gerne have sat nogen radio knapper til ja, når man trykker
>>> på en button.

> Må brugeren...
> Skrive nyheder
> [X] Ja [ ] Nej
>
> Ændre nyheder
> [ ] Ja [X] Nej

Jeg har lidt svært ved at få øje på den dybere logik i, at man skal klikke
på en knap for at markere en radio-button. Normalt vil man da bare klikke
direkte på den ønskede radio-button og det virker uden brug af javascript.

> Desværre er det ikke muligt at vise, da det kræver at man er logget
> ind for at se siden.

Så kan du vel lave en demoside, hvor man kan se koden uden at være logget
ind. Gør det nemt for andre at hjælpe dig.


--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk/



Martin (15-04-2006)
Kommentar
Fra : Martin


Dato : 15-04-06 02:45

Erik Ginnerskov wrote:
> Martin wrote:
>
>>>> Jeg vil gerne have sat nogen radio knapper til ja, når man trykker
>>>> på en button.
>
>> Må brugeren...
>> Skrive nyheder
>> [X] Ja [ ] Nej
>>
>> Ændre nyheder
>> [ ] Ja [X] Nej
>
> Jeg har lidt svært ved at få øje på den dybere logik i, at man skal klikke
> på en knap for at markere en radio-button. Normalt vil man da bare klikke
> direkte på den ønskede radio-button og det virker uden brug af javascript.

Hvis der er 20+ knapper - og man skal sætte ALLE til Ja, så bliver det
godt nok kedeligt til sidst ;)

>
>> Desværre er det ikke muligt at vise, da det kræver at man er logget
>> ind for at se siden.
>
> Så kan du vel lave en demoside, hvor man kan se koden uden at være logget
> ind. Gør det nemt for andre at hjælpe dig.

Selvfølgelig.
Det havde jeg slet ikke tænkt på :)
http://www.natten-i.dk/klan/radioer.html
Værsågod

Lasse Reichstein Nie~ (11-04-2006)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 11-04-06 23:38

Martin <news@natten-i.dk> writes:

> Nej det er faktisk radioknapper.
>
> Fx sådan her
>
> Må brugeren...
> Skrive nyheder
> [X] Ja [ ] Nej
....
> Selvfølgelig har hvert par ja/nej radio'er samme name og id attribut.

Ok, det giver mening. Og du vil have sat de radioknapper med værdien
"1" til checked.

....
> Må brugeren...
> <form action=".." method="post" id="edit_rights">
> Oprette nyheder
> <input type="radio" id="radioknap_1" name="radioknap_1" value="1"> Ja
> <input type="radio" id="radioknap_1" name="radioknap_1" value="0"> Nej

Det er så ugyldigt HTML. To elementer må ikke have samme id.

Hvis det skal være fancy (og hvorfor skulle det ikke det :) så prøv:

<input type="radio" name="radioknap_1" value="1" id="radioknap_1_1">
<label for="radioknap_1_1">Ja</label>
<input type="radio" name="radioknap_1" value="0" id="radioknap_1_0">
<label for="radioknap_1_0">Nej</label>

Et input-element må gerne have både "id" og "name", og de behøver ikke
være ens. Navnet er "control name", det der submittes. Flere elementer
kan have samme navn, selv indenfor samme form. Id er et unikt id i
dokumentet.

>
> Slette nyheder
> <input type="radio" id="radioknap_2" name="radioknap_2" value="1"> Ja
> <input type="radio" id="radioknap_2" name="radioknap_2" value="0"> Nej

ditto

> ...
> </form>
>
....
> Er der ikk et eller andet med at når man bruger form.elements så skal
> formen også have en name attribut?

Nej.
Selv hvis man bruger "document.forms['minForm']", så virker det stadig
hvis "minForm" er formens id (undtagen gamle browsere fra NS4 tiden,
de forstår ikke de nymodens "id"-attributter).

>> som kaldes med:
>> <input type="button" value="alle til ja"
>> onclick='setAllChecked(this.form, ["radioknap_1",
>> "radioknap_2", "radioknap_3", "radioknap_4"], true)' >
>> Her antages det at "radioknap_1" er navnet på form-controllen (i.e.,
>> name-attributten, ikke id-attributten), og at det hele er inde i en form.
>> Det gør ting meget nemmere.
>
> Så overholder vi ikke w3c strict mere, og det vil jeg altså :)

Den er skam fint overholdt.

En form-control er fx et input-element (andre alternativer er select,
textarea, eller object). Det er ikke form-elementet jeg taler om.
En form-control må have både "name" og "id", og de behøver ikke engang
være ens.


Ok, nu tror jeg at jeg forstår opgaven. Her er så et forsøg på løsning:

<form ... >
<!-- knap skal være inde i form -->
<input type="button" value="ja til alt"
onclick="setAllChecked(this.form,
['radioknap_1','radioknap_2','radioknap_3','radioknap_4'],
'1');">

<script type="text/javascript"> // kunne stå i <head> også.
function setAllChecked(form, names, value) {
for(var i = 0; i < names.length; i++) { // for hvert navn
var elems = form.elements[names[i]]; // find controls med det navn
if (typeof elems.length == "number") { // hvis mere end en
for (var j = 0; j < elems.length; j++) { // gennemløb og
var elem = elems[j];
if (elem.value == value) { // hvis value som angivet
elem.checked = true; // sæt til valgt
}
}
} else { // hvis kun en
elems.checked = true; // vælg altid
}
}
}
</script>


Held og lykke :)
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Martin (15-04-2006)
Kommentar
Fra : Martin


Dato : 15-04-06 02:55

Lasse Reichstein Nielsen wrote:
> Martin <news@natten-i.dk> writes:
>
>> Nej det er faktisk radioknapper.
>>
>> Fx sådan her
>>
>> Må brugeren...
>> Skrive nyheder
>> [X] Ja [ ] Nej
> ...
>> Selvfølgelig har hvert par ja/nej radio'er samme name og id attribut.
>
> Ok, det giver mening. Og du vil have sat de radioknapper med værdien
> "1" til checked.

Nemlig :)

>
> ...
>> Må brugeren...
>> <form action=".." method="post" id="edit_rights">
>> Oprette nyheder
>> <input type="radio" id="radioknap_1" name="radioknap_1" value="1"> Ja
>> <input type="radio" id="radioknap_1" name="radioknap_1" value="0"> Nej
>
> Det er så ugyldigt HTML. To elementer må ikke have samme id.

Havde faktisk ikke opdaget det, men de hedder faktisk radioknap_1_0 og
radioknap_1_1

>
> Hvis det skal være fancy (og hvorfor skulle det ikke det :) så prøv:
>
> <input type="radio" name="radioknap_1" value="1" id="radioknap_1_1">
> <label for="radioknap_1_1">Ja</label>
> <input type="radio" name="radioknap_1" value="0" id="radioknap_1_0">
> <label for="radioknap_1_0">Nej</label>

Der er skam labels på :)


Wauv - med nedenstående, og et par små ændringer - så virker det jo bare
perfekt.

1000 tak for hjælpen :)

> <form ... >
> <!-- knap skal være inde i form -->
> <input type="button" value="ja til alt"
> onclick="setAllChecked(this.form,
> ['radioknap_1','radioknap_2','radioknap_3','radioknap_4'],
> '1');">
>
> <script type="text/javascript"> // kunne stå i <head> også.
> function setAllChecked(form, names, value) {
> for(var i = 0; i < names.length; i++) { // for hvert navn
> var elems = form.elements[names[i]]; // find controls med det navn
> if (typeof elems.length == "number") { // hvis mere end en
> for (var j = 0; j < elems.length; j++) { // gennemløb og
> var elem = elems[j];
> if (elem.value == value) { // hvis value som angivet
> elem.checked = true; // sæt til valgt
> }
> }
> } else { // hvis kun en
> elems.checked = true; // vælg altid
> }
> }
> }
> </script>
>
>
> Held og lykke :)
> /L

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste