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?
Formulärkontroll
6 svar · 331 visningar · startad av Prime_66
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;
...
:)
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 "<" ?
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...
:)
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..
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.
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();
}
:)