web-dev-qa-db-fra.com

Uncaught TypeError: Impossible de lire la propriété 'valeur' ​​de non définie

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?

39
John

On dirait que l'une de vos valeurs, avec une clé de propriété de 'valeur' ​​n'est pas définie. Testez que i1, i2et __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'; }
}
32
OsQu

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

10
nfechner

Essayez ceci, cela fonctionne toujours et vous n’obtiendrez PAS de TypeError:

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
    }
}
7
Joe L.

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

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

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

6
Abhijit

Les articles ici m'aident beaucoup à trouver une solution pour le Uncaught TypeError: Impossible de lire la propriété 'valeur' ​​de undefined issue.

Il existe déjà de nombreuses réponses correctes, mais ce que nous n’avons pas ici, c’est la combinaison de 2 réponses qui, à mon avis, résoudra 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 faites 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.

5
Festus Tamakloe

Vous pouvez simplement créer une fonction pour vérifier si la variable existe, sinon elle retournera une valeur par défaut:

function isSet(element, defaultVal){

    if(typeof element != 'undefined'){

        return element;

    }

    console.log('one missing element');

    return defaultVal;
}

Et utilisez-le dans une vérification variable:

var variable = isSet(variable, 'Default value');
0
Khaled Ali