Quelle est la différence entre JavaScript getElementById() et getElementsByName() fonctions?

Autre que le fait que ma brève recherche m'indique ce dernier sera de retour une collection plutôt que d'un seul élément avec l'ID passé.

Considérons le code suivant:

function validateAllFields()
{
var clientid = document.getElementById("clientid");
var programs = document.getElementById("programs");
var startmonth = document.getElementById("startmonth");
var startday = document.getElementById("startday");
var startyear = document.getElementById("startyear");
var completed = document.getElementsByName("completed");
var goals = document.getElementsByName("goals");
var errors = document.getElementById("errorMsg");
errors.innerHTML = "";

if(isNumeric(clientid, errors, "Please enter a valid client ID")){
    if(madeSelection(programs, errors, "Please select a program from the drop-down list")){
        if(madeSelection(startmonth, errors, "Please enter a month for the start date")){
            if(madeSelection(startday, errors, "Please enter a day for the start date")){
                if(madeSelection(startyear, errors, "Please enter a year for the start date")){
                    if(checked(completed, errors, "Please choose an option that indicate whether the client has completed the program")){
                        if(checked(goals, errors, "Please choose an option that indicate whether the client has met his/her goals.")){
                            window.alert("GOT IN TO  RETURN TRUE");
                            return true;
                        }
                    }
                }
            }
        }
    }
}
return false;
}
</script>

Le code ci-dessus fonctionne parfaitement après l'avoir mis dans le onsubmit gestionnaire de la forme. Toutefois, plus tôt, pour les éléments (programmes, startmonth, startday, startyear) j'ai été en utilisant getElementsByName(), les éléments suivants s'est produit:

  1. Le code semble arriver à la deuxième ligne de la si les blocs "si(madeSelection(des programmes...." et il s'affiche le msg d'erreur via innerHTML pour une brève seconde et
  2. Procédé à soumettre le formulaire COMME SI le JS avait en effet retourné véritable. Comme vous pouvez le dire, il y a une alerte popup droit avant de retourner vrai et le popup ne s'est PAS montré à tous.
  3. De mauvaises données a été soumis à mon test de la base de données, car le formulaire n'a pas été validé. (encore à écrire une validation côté serveur, avec cette forme, mais je le ferai).

veuillez prendre les éléments programmes, startmonth, startday, et startyear sont des listes déroulantes avec les mêmes attributs id et name.

Aussi, le madeSelection fonction est donnée comme:

function madeSelection(element, error, msg) {
if (element[0].value == "none" || element[0].valueOf == "none" || element[0].value == "") {
    error.innerHTML = msg;
    element.focus();
    return false;
} else {
    return true;
}
}

Mon code fonctionne maintenant après que j'ai changé ces éléments à l'aide getElementById(), je me demandais juste pourquoi getElementsByName présenté un tel comportement.

  • voulez-vous dire getElementsByTagName()?
  • non, il n'est pas: w3schools.com/jsref/met_doc_getelementsbyname.asp
  • Votre code est un gâchis, avec tout ce que l'indentation. Envisager un retour faux après chaque erreur détectée et le retour de vrai à la fin, s'il n'y avait pas d'erreurs.
InformationsquelleAutor KyleL | 2011-06-15