このエラーを発生させる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'; }
このエラーはどういう意味ですか?
'value'のプロパティキーが定義されていない、値の1つと思われます。 ifステートメントを実行する前に、i1
、i2
、および__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'; }
}
document.getElementById('i1')
、document.getElementById('i2')
、またはdocument.getElementsByName("username")[0]
のいずれかが要素を返していません。すべての要素が存在することを確認してください。
これを試してください、それは常に機能し、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
}
}
まず、document.getElementsByName( "username")[0]が実際にオブジェクトを返し、「未定義」ではないことを確認する必要があります。次のように簡単に確認できます
if (typeof document.getElementsByName("username")[0] != 'undefined')
他の要素のパスワードについても同様です。
ここの投稿は、ncaught TypeError:undefinedのプロパティ 'value'を読み取ることができませんの問題の解決策を見つけるための私の道に大いに役立ちます。
すでに正しい答えがたくさんありますが、ここにないのは、この問題を完全に解決できると思う2つの答えの組み合わせです。
function myFunction(field, data){
if (typeof document.getElementsByName("+field+")[0] != 'undefined'){
document.getElementsByName("+field+")[0].value=data;
}
}
違いは、チェックを行うこと(プロパティが定義されているかどうか)と、チェックがtrueの場合、値を割り当てようとすることです。
コードは他のコードから自動的に生成されたように見えます-id=i1
とi2
とname=username
とpassword
のhtml要素が存在することを処理前に確認する必要があります。
変数が存在するかどうかを確認する関数を作成するだけで、そうでない場合はデフォルト値を返します:
function isSet(element, defaultVal){
if(typeof element != 'undefined'){
return element;
}
console.log('one missing element');
return defaultVal;
}
そして、変数チェックで使用します:
var variable = isSet(variable, 'Default value');