11
votes

Passer une variable de forme dans le champ ONSUBMIT?

J'essaie de vérifier le contenu d'un formulaire avant de l'envoyer. Fondamentalement, j'essaie de travailler avec les chiffres sous la forme et de vous assurer qu'ils sont dans la plage correcte. Le problème est que le JavaScript que j'ai qui tente de vérifier qu'il pense que le point étant transmis à celui-ci est NAN (je l'ai fait l'analyse).

Un peu de travail a révélé que la variable ("taille") fait référence à Un "HTMLinPutElement", que je suppose, en effet, Nan (bien que je ne suis pas tout à fait sûr de ce que c'est réellement). Je pense que le problème est que l'ONSUBMIT ne réussit pas ce que je veux que ce que je veux passer, même si j'ai nommé le champ "Taille" et j'ai transmis une "taille" "aussi" p>

J'ai essayé de le mettre en place Les guillemets, mais cela vient de le transformer en une chaîne ... p>

Je me demande si peut-être que vous ne pouvez peut-être pas passer une variable de sous le formulaire à ce sujet sur le champ ONSUBMIT? Est-ce vrai? Si oui, comment devrais-je faire cela? P>

Voici le formulaire: p> xxx pré>

et voici la fonction, des fonctions.js: p >

function goodForm(gSize, day, month, year) {
"use strict";
window.alert("goodFrame(): "+gSize);
var groupSize1 = parseInt( gSize.replace(/^"|"$/g, ""), 10);
window.alert("goodFrame(): "+groupSize1);
var sizeInt = parseInt(groupSize1);
if(groupSize(sizeInt) && goodDate(day, month, year)){
    window.alert("true");
    return true;
}
else{
    window.alert("false")
    return false;
}


3 commentaires

Pourriez-vous rechercher le champ par ID à l'intérieur de la méthode Onsubmit?


Er ... Peut-être - comment puis-je faire cela (je suis assez nouveau à cela, au cas où cela n'est pas encore devenu clair ...)


Voir la réponse ci-dessous. Je vais élaborer.


4 Réponses :


6
votes

est quelque chose comme ça ce que vous voulez dire?

JavaScript: p> xxx pré>

html: p> xxx pré>

élaboration: P>

La fonction Onsubmit est connectée à un élément dont l'identifiant est "MyForm" spécifié dans le HTML comme ID = "MyForm". Vous pouvez rechercher l'élément avec cet identifiant à l'aide de la méthode GetElementyID sur le document. Soyez prudent de ne pas faire GetElementyID (ID VS ID). Lorsque vous soumettez le formulaire, cette méthode sera appelée et vous serez sur votre chemin. P>

Ensuite, vous pouvez rechercher des éléments de la page pour obtenir leur valeur de la même manière que vous avez regardé le formulaire. Il suffit de leur donner un identifiant comme id = "Taille" et vous pouvez le regarder. P>

Vous pouvez également faire quelque chose comme: p> xxx pré> P>

alert(document.forms["myForm"].size.value);


0 commentaires

5
votes

Vous pouvez essayer de donner à chacune des entrées (jour, mois, année, taille) à ID (vous pouvez utiliser la même valeur que votre attribut de nom). Obtenez la valeur par ID dans votre GoodForm () Fonction.

<- Ensemble

document.getelementByID ("Quelqu'un ID"). Valeur <- Obtenez


0 commentaires

4
votes

Tout d'abord, faire une validation en ligne comme celle-ci (via OnSubmit) est une forme de mauvaise forme. Habituellement, vous voudrez faire des événements contraignants, je vais inclure un exemple de code à l'aide de JQuery, mais vous pouvez également utiliser d'autres méthodes.

Premièrement, donnez à votre formulaire un attribut d'identifiant unique pour la page. Je suppose p>

Suivant, vous voudrez probablement que votre méthode de validation "sache" sur les champs dont il a besoin. P >

//this function is executed when the page's dom is loaded
// assumes jQuery is loaded already
$(function(){

    //binds the myFormOnSubmit method below to run as part of your form's onsubmit method
    $('#MyForm').submit(myFormOnSubmit);

    //runs when the form is trying to submit
    function myFormOnSubmit(event) {
        var f = $(this);

        // note, you have to match on attribute selectors
        //  you may want to give each of these fields an id=".." attribute as well to select against #IdName
        var size = f.find('[name=size]').val();
        var day = f.find('[name=day]').val();
        var month = f.find('[name=month]').val();
        var year = f.find('[name=year]').val();
        var tour = f.find('[name=tour]:checked').val(); //selected radio button's

        var isValid = validDate(year,month,day) && validSize(gSize) && validTour(tour);

        if (!isValid) {
            event.preventDefault(); //stop submit
        }
    }

    function validTour(tour) {
        return !!tour; //will be false if it's an empty string, ex: no selected value
    }

    function validSize(size) {
        var s = parseInt(size); //get integer value for size

        if (s <= 0 || s > 10) return false; //not in range
        if (s.toString() !== size) return false; //doesn't match input, invalid input
        return true; //true
    }

    function validDate(year, month, day) {
        //coerce the values passed into numbers
        var y = +year, m = +month, d = +day;

        //convert to an actual date object
        var dtm = new Date(y, --m, d);

        //compare the values
        if (!dtm) return false; //invalid input
        if (dtm.getFullYear().toString() !== year.toString()) return false; //year doesn't match input
        if ((dtm.getMonth() + 1).toString() !== month.toString()) return false; //month doesn't match input
        if (dtm.getDate().toString() !== day.toString()) return false; //day doesn't match input

        var now = new Date(); console.log(now);
        var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());

        //entered date is before today, invalid
        if (dtm &lt= today) return false;

        //passed checks
        return true;
    }
});


0 commentaires

2
votes

Si vous ne voulez pas utiliser jQuery:

Vous n'avez pas besoin de transmettre les paramètres, essayez de leur donner un identifiant et de les obtenir par leur identifiant dans la fonction de bonne forme. P>

function goodForm() {
    var size = document.getElementById("size");
    if(null != size){
       // do something with size.value
    }

}


0 commentaires