webForumDet fria alternativet

Formulärkontroll

6 svar · 331 visningar · startad av Prime_66

Prime_66Medlem sedan aug. 2004296 inlägg
#1

Jag har checkboxar som alla heter song_id[] i ett form. När jag klickar på submit vill jag kolla igenom om dessa är ikryssade eller ej. Om det inte är det ska formen inte skickas nämligen. Några förslag?

Peter SMedlem sedan dec. 20025 484 inlägg
#2

Denna kod placeras lämpligen i en funktion som körs i onsubmit-attributet:

...
var elms = document.forms["[b]namn_på_formulär[/b]"].elements["song_id[]"],
    iLen = elms.length;
while (iLen-->0)
    if (!elms[iLen].checked)
        return false;
...

:)

Prime_66Medlem sedan aug. 2004296 inlägg
#3

Tackar :) Det funkar bra förutom att det inte funkar när det bara är EN checkbox kvar. Alltså om det är till exempel 4 checkboxar fungerar funktionen bra. Men när det är enbart en checkbox händer ingeting. Kolla här:

Jag kallar funktionen från ett tryck på en hyperlänk:
<html>
<a href="javascript:document.form1.action.value='delete'; Empty();">Ta bort checkbox>
</html>

Den går in funktionen:
<script>
function Empty(){
var elms = document.forms["form1"].elements["song_id[]"];
iLen = elms.length;
while (iLen-->0){
if (!elms[iLen].checked){
//Gör inget
}
else{
//Submitta form
document.form1.submit();
}

}

}
</script>

Jag fattar inte riktigt vad while (iLen-->0) betyder rikigt heller? Brukar man inte använda "==", ">" eller "<" ?

Peter SMedlem sedan dec. 20025 484 inlägg
#4

Introduktionen av måsvingarna utelämnades medvetet i mitt exempel. Funktionen Empty()s definition bör därför vara:

function Empty(){
var elms = document.forms["form1"].elements["song_id[]"],
    iLen = elms.length;

while (iLen-->0)
    if (!elms[iLen].checked)
        return false;

// Alla checkboxar ikryssade. Skicka formulär.
document.forms["form1"].submit();
}

iLen-->0-delen är bara ett sätt att dekrementera iLen till dess att villkoret stämmer, d.v.s.: så länge iLen-- är större än 0, gör...

:)

Prime_66Medlem sedan aug. 2004296 inlägg
#5

Problemet kvarstår. När det endast är EN checkbox kvar submittas formet trots att det inte borde det. Den går alltså inte in i if-satsen, vilket är väldigt skumt. Någon aning varför? Har det något att göra med att song_id[] är en array kanske..

Prime_66Medlem sedan aug. 2004296 inlägg
#6

Jag löste det genom att lägga in ett hidden-field med namnet song_id[]. Så att det alltid finns mer än ett objekt som heter song_id[]. DÅ verkar det funka. Inte bästa lösningen..men men.

Peter SMedlem sedan dec. 20025 484 inlägg
#7

Sorry, jag insåg ej att iLen kunde anta värdet undefined. Här är en lösning:

function Empty(){
var elms = document.forms["form1"].elements["song_id[]"],
    iLen = elms.length;

if (typeof iLen == "undefined" && !elms.checked) return false;

while (iLen-->0)
    if (!elms[iLen].checked)
        return false;

// Alla checkboxar ikryssade. Skicka formulär.
document.forms["form1"].submit();
}

:)

Genererad på 367 ms · cache AV · v20260730165559-full.f96bc7eb