web-dev-qa-db-ja.com

不明なTypeError:未定義のプロパティ 'value'を読み取れません

このエラーを発生させるJavaScriptコードがあります

Uncaught TypeError: Cannot read property 'value' of undefined

コード

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

このエラーはどういう意味ですか?

43
John

'value'のプロパティキーが定義されていない、値の1つと思われます。 ifステートメントを実行する前に、i1i2、および__iが定義されていることをテストします。

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')、またはdocument.getElementsByName("username")[0]のいずれかが要素を返していません。すべての要素が存在することを確認してください。

10
nfechner

これを試してください、それは常に機能し、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
    }
}
8
Joe L.

まず、document.getElementsByName( "username")[0]が実際にオブジェクトを返し、「未定義」ではないことを確認する必要があります。次のように簡単に確認できます

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

他の要素のパスワードについても同様です。

6
Abhijit

ここの投稿は、ncaught TypeError:undefinedのプロパティ 'value'を読み取ることができませんの問題の解決策を見つけるための私の道に大いに役立ちます。

すでに正しい答えがたくさんありますが、ここにないのは、この問題を完全に解決できると思う2つの答えの組み合わせです。

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

違いは、チェックを行うこと(プロパティが定義されているかどうか)と、チェックがtrueの場合、値を割り当てようとすることです。

5
Festus Tamakloe

コードは他のコードから自動的に生成されたように見えます-id=i1i2name=usernamepasswordのhtml要素が存在することを処理前に確認する必要があります。

0

変数が存在するかどうかを確認する関数を作成するだけで、そうでない場合はデフォルト値を返します:

function isSet(element, defaultVal){

    if(typeof element != 'undefined'){

        return element;

    }

    console.log('one missing element');

    return defaultVal;
}

そして、変数チェックで使用します:

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