/ 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
Tæl antal markerede checkbokse?
Fra : Thomas Voller


Dato : 08-06-03 18:14

Hej NG



Sikkert simpelt, men hvordan tæller man antallet af markerede checkbokse på
en side med javascript? Jeg ledte på nettet, fandt et script og modificerede
det. Det oprindelige script fandt jeg her:
http://www.js-examples.com/example/?ex=950&mode=1&COLOR_OFF=YES

Min modification er her:
<script language="JavaScript" type="text/javascript">
function doIt(_f){
var _countCK=0;
for(var _obj = _f.firstChild; _obj ; _obj=_obj.nextSibling){
if(_obj.name!=undefined){
if(_obj.type=="checkbox"){
if(_obj.checked)
_countCK = _countCK + 1;
}
}
}
return confirm('Slet ' + _countCK + ' ting?');
}
</script>

Jeg kan bare ikke få det til at virke. Jeg markerer nogle checkbokse og
kører funktionen, men funktionen returnerer tallet nul hver gang. Et
eksempel findes her:
http://www.voller.dk/rod/count.htm

Kan nogle finde brøleren?




Mvh. Voller
voller@voller.nospam.dk
http://www.voller.dk

Bemærk nospam i e-mailadressen.



 
 
Lasse Reichstein Nie~ (08-06-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 08-06-03 19:17

"Thomas Voller" <voller@voller.nospam.dk> writes:

> Sikkert simpelt, men hvordan tæller man antallet af markerede checkbokse på
> en side med javascript? Jeg ledte på nettet, fandt et script og modificerede
> det. Det oprindelige script fandt jeg her:
> http://www.js-examples.com/example/?ex=950&mode=1&COLOR_OFF=YES
>
> Min modification er her:
....
> Jeg kan bare ikke få det til at virke. Jeg markerer nogle checkbokse og
> kører funktionen, men funktionen returnerer tallet nul hver gang. Et
> eksempel findes her:
> http://www.voller.dk/rod/count.htm
>
> Kan nogle finde brøleren?

Du genneløber kun børnene af *et* element. På siden er det
form-element. Form-elementet har netop to børn, begge paragraffer
(p-elementer), derfor finder den ingen input-elementer. For at få dem
med skal du også gennemløbe børnenes børn og så videre.

En rekursiv version kunne være:

<script type="text/javascript">
function countChecked(elem) {
if (elem.tagName.match(/input/i) && elem.type.match(/checkbox/i)) {
return (elem.checked?1:0);
}
var count = 0;
for (var chld = elem.firstChild;chld !== null;chld = chld.nextSibling) {
count += countChecked(chld);
}
return count;
}
</script>

Alternativt kunne du nøjes med at gennemløbe input-elementerne i formen:

<script type="text/javascript">
function countChecked(form) {
var elems = form.elements;
var count = 0;
for (var i=0;i<elems.length;i++) {
if (elems[i].type.match(/radiobox/i) && elems[i].checked) {
count++;
}
}
return count;
}
</script>

Endnu mere alternativt, hvis de ikke alle input-elementerne er i samme
form, så kan elems findes ved:

var elems = document.getElementsByTagName("input");

Håber det hjælper.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'

Thomas Voller (08-06-2003)
Kommentar
Fra : Thomas Voller


Dato : 08-06-03 22:20

"Lasse Reichstein Nielsen" <lrn@hotpop.com> skrev...
> Håber det hjælper.

Det gjorde det så absolut. Jeg modificerede dit forslag lidt så det kom til
at se ud som nedenstående. Du var kommet til at skrive radiobutton i stedet
for checkbox og så har jeg lavet en lille if-forgrening der returnerer
forskellige svar afhængigt af hvor mange checkbokse der er markeret.

<script type="text/javascript">
function CountChecked(form) {
var elems = form.elements;
var count = 0;
for (var i=0;i<elems.length;i++) {
if (elems[i].type.match(/checkbox/i) && elems[i].checked) {
count++;
}
}
if (count == 0){
alert("Du skal markere en eller flere poster at slette.");
return false;
} else if (count == 1) {
return confirm("Vil du slette den markerede tekst?");
} else {
return confirm("Vil du slette de " + count + " markerede tekster?")
}
}
</script>

Så det hjalp. Mange tak. Jeg tænkte... Kan jeg få dig til, ganske kort, at
forklare den for-løkke? Jeg kan ikke helt genneskue hvordan den fungerer?



Mvh. Voller
voller@voller.nospam.dk
http://www.voller.dk



Lasse Reichstein Nie~ (08-06-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 08-06-03 23:48

"Thomas Voller" <voller@voller.nospam.dk> writes:

> var elems = form.elements;
> var count = 0;
> for (var i=0;i<elems.length;i++) {
> if (elems[i].type.match(/checkbox/i) && elems[i].checked) {
> count++;
> }
> }
>
> Så det hjalp. Mange tak. Jeg tænkte... Kan jeg få dig til, ganske kort, at
> forklare den for-løkke? Jeg kan ikke helt genneskue hvordan den fungerer?

Joda.

Enhver form har en egenskab der hedder "elements". Det er en samling
af alle input-elementerne i den (inklusive textarea og select). Det
er *ikke* et array, selvom det ligner, det er en "HTMLCollection".

Elementerne i element-samlingen kan gennemløbes ved fx at lade i løbe
fra 0 til form.elements.length, og så kigge på form.elements[i].

For hvert element tjekker jeg så om typen er "checkbox". Jeg bruger et
regulært udtryk fordi jeg aldrig kan huske om "checkbox" er med store
eller små bogstaver. Det regulære udtryk har "i"-flaget tilføjet så
det ignorerer bogstav-"case"'en.
Hvis elementet er en checkbox, og den er "checked", så tælles count op.

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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408928
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste