Uncaught TypeError: kan eigenschap ‘waarde’ van undefined niet lezen

Ik heb een JavaScript-code die deze fout geeft

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'; }

Wat betekent deze fout?


Antwoord 1, autoriteit 100%

Het lijkt erop dat een van uw waarden, met een eigenschapssleutel van ‘waarde’ niet gedefinieerd is. Test of i1, i2en __igedefinieerd zijn voordat de if-statements worden uitgevoerd:

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'; }
}

Antwoord 2, autoriteit 36%

Ofwel document.getElementById('i1'), document.getElementById('i2'), of document.getElementsByName("username")[0]retourneert geen element. Controleer of alle elementen bestaan.


Antwoord 3, autoriteit 28%

Probeer dit, het werkt altijd, en je krijgt GEEN 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
    }
}

Antwoord 4, autoriteit 17%

Eerst moet u ervoor zorgen dat document.getElementsByName(“username”)[0] daadwerkelijk een object retourneert en niet “undefined”. U kunt eenvoudig controleren zoals

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

Hetzelfde geldt voor het wachtwoord van het andere element.


Antwoord 5, autoriteit 17%

De berichten hier helpen me enorm op weg om een oplossing te vinden voor de Uncaught TypeError: Cannot read property ‘value’ of undefinedissue.

Er zijn hier al veel antwoorden die correct zijn, maar wat we hier niet hebben, is de combinatie van 2 antwoorden die dit probleem volgens mij volledig oplossen.

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

Het verschil is dat u een controle uitvoert (of een eigenschap is gedefinieerd of niet) en als de controle waar is, kunt u proberen er een waarde aan toe te kennen.


Antwoord 6

Je kunt gewoon een functie maken om te controleren of de variabele bestaat, anders wordt een standaardwaarde geretourneerd:

function isSet(element, defaultVal){
    if(typeof element != 'undefined'){
        return element;
    }
    console.log('one missing element');
    return defaultVal;
}

en gebruik het in een variabele controle:

var variable = isSet(variable, 'Default value');

Other episodes