60 votes

Uncaught TypeError : impossible de lire la propriété « valeur » d'undefined

J'ai du code JavaScript qui donne cette erreur

 Uncaught TypeError: Cannot read property 'value' of undefined

Code

 var i1 = document.getElementById('i1');
var i2 = document.getElementById('i2');
var __i = {'user' : document.getElementsByName("username")[0], 'pass' : document.getElementsByName("password")[0] };
if(  __i.user.value.length >= 1 ) { i1.value = ''; } else { i1.value = 'Acc'; }

if(  __i.pass.value.length >= 1 ) { i2.value = ''; } else { i2.value = 'Pwd'; }

Que signifie cette erreur?

38voto

OsQu Points 1028

On dirait que l'une de vos valeurs, avec une clé de propriété de 'valeur', n'est pas définie. Testez que i1 , i2 et __i sont définis avant d'exécuter les instructions if :

 var i1 = document.getElementById('i1');
var i2 = document.getElementById('i2');
var __i = {'user' : document.getElementsByName("username")[0], 'pass' : document.getElementsByName("password")[0] };
if(i1 && i2 && __i.user && __i.pass)
{
    if(  __i.user.value.length >= 1 ) { i1.value = ''; } else { i1.value = 'Acc'; }

    if(  __i.pass.value.length >= 1 ) { i2.value = ''; } else { i2.value = 'Pwd'; }
}

14voto

nfechner Points 9402

Soit document.getElementById('i1') , document.getElementById('i2') , soit document.getElementsByName("username")[0] ne renvoie aucun élément. Vérifiez que tous les éléments existent.

10voto

Joe L. Points 131

Essayez ceci, cela fonctionne toujours et vous n'obtiendrez AUCUNE erreur de type :

 try{

    var i1 = document.getElementById('i1');
    var i2 = document.getElementById('i2');
    var __i = {'user' : document.getElementsByName("username")[0], 'pass' : document.getElementsByName("password")[0] };
    if(  __i.user.value.length >= 1 ) { i1.value = ''; } else { i1.value = 'Acc'; }
    if(  __i.pass.value.length >= 1 ) { i2.value = ''; } else { i2.value = 'Pwd'; }

}catch(e){
    if(e){
    // If fails, Do something else
    }
}

6voto

Abhijit Points 865

Tout d'abord, vous devez vous assurer que document.getElementsByName("username")[0] renvoie réellement un objet et non "undefined". Vous pouvez simplement vérifier comme

 if (typeof document.getElementsByName("username")[0] != 'undefined')

De même pour l'autre mot de passe de l'élément.

6voto

Festus Tamakloe Points 4181

Les articles ici m'aident beaucoup sur mon chemin pour trouver une solution à l' erreur de type non détectée : Impossible de lire la propriété « valeur » du problème non défini.

Il y a déjà ici de nombreuses réponses qui sont correctes, mais ce que nous n'avons pas ici, c'est la combinaison de 2 réponses qui, à mon avis, résolvent complètement ce problème.

 function myFunction(field, data){
  if (typeof document.getElementsByName("+field+")[0] != 'undefined'){
  document.getElementsByName("+field+")[0].value=data;
 }
}

La différence est que vous effectuez une vérification (si une propriété est définie ou non) et si la vérification est vraie, vous pouvez essayer de lui attribuer une valeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X