webForumDet fria alternativet

Formulärkontroll

JavaScriptur Javascript

6 svar · 331 visningar · startad av Prime_66

Medlem sedan aug. 2004290 inlägg
Frågan#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?

Medlem sedan dec. 20025 483 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;
...

:)

Medlem sedan aug. 2004290 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 "<" ?

Medlem sedan dec. 20025 483 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...

:)

Medlem sedan aug. 2004290 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..

Medlem sedan aug. 2004290 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.

Medlem sedan dec. 20025 483 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();
}

:)

127 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)