Op www.gezondezorg.org/upts-tryout.php heb ik een vragenlijstformulier staan. Eerst dient men één van de twee zorgsoorten te selecteren, boven de tabel. Vervolgens dient men op de drie hoofdpunten A, B en C een score te geven. Dat wordt gecheckt door drie afzonderlijke scripts (welke nog meer doen), die door de functie checkAllAndSend() van de Verzend-knop gecalld worden.

Als (op de correcte wijze) scores gegeven worden gaat alles goed. En als op geen der hoofdpunten een score gegeven wordt, komen keurig de omissiealerts op en wordt het formulier niet ingestuurd. Maar in dat geval komt na het C-omissiealert (alleen) het A-omissiealert opnieuw op. Waarom is dat en hoe corrigeer ik dat? Ik krijg geen scriptfoutmelding van Firebug en de HTML is valide HTML5.

De betreffende scripts staan onderaan in het scriptblok, dat weer onderaan in de broncode staat. Ik heb voor het testgemak de D-checkfunctie uitgeschakeld. De functie checkAllAndSend() ziet er als volgt uit:


function checkAllAndSend() {
    var careLocation = upssForm.elements["care-location"];
    if (careLocation[0].checked == true) {
        checkASection();
        checkBSection();
        checkCSection();
        //checkDSection();
        if ((checkASection() == false) || (checkBSection() == false) || (checkCSection() == false) /*|| (checkDSection() == false)*/)
            return false;
        else {
            upssForm.submit();
            upssForm.reset();
        }
    }
    else if (careLocation[1].checked == true) {
        checkASection();
        checkBSection();
        //checkDSection();
        if ((checkASection() == false) || (checkBSection() == false) /*|| (checkDSection() == false)*/)
            return false;
        else {
            upssForm.submit();
            upssForm.reset();
        }
    }
    else {
        alert('U dient bovenaan nog aan te geven welke soort zorg het betreft.');
        return false;
    }
}
Ik zie maar 1 alert.

Met andere woorden: de functie wordt twee keer uitgevoerd.
Wat wij dus moeten weten, is wie/wat die functie uitvoert. We hebben de code nodig buiten de functie.

---
Ik zal al eens zien op die link die je stuurde.
Ik heb de oplossing aangedragen gekregen. Het bleek dat if (checkASection() == false) een hernieuwde call inhield. De oplossing, in elementaire vorm:

var aResult = checkASection();
if(aResult == false) {
}

Reageren