0

エラーが発生します:

キャッチされていない TypeError: 未定義のプロパティ '長さ' を読み取ることができません

次の JavaScript コードを使用します。

var varId = $("#someInputId");
if (typeof varId !== "undefined" && varId.val().length == 0)

varIdHTML ページにある場合とない場合がある入力要素の ID はどこにありますか。

element が未定義の場合、2番目の句は計算されないと思います。

このようなエラーが発生する理由はありますか?

4

5 に答える 5

2

これは、jQuery オブジェクトがおそらく空であるために発生しています。

コードを段階的に見ていきましょう。

var varId = $("#someInputId");

この後、varId によって参照される jQuery オブジェクトが作成されます。返された要素の数に関係なく、これは jQueryオブジェクトであることに注意してください。次のようにします。

if (typeof varId !== "undefined" && varId.val().length == 0)

ここで最初に、これが質問の単なるタイプミスかどうかはわかりませんが、!== は != である必要があります。

とにかく、typeof varId != "undefined"状態の部分を考慮してください。varId はオブジェクトで未定義ではないため、これは true を返します。これは真なので、条件の評価は次の部分に進みます。そのため、評価中varId.val().length == 0にエラーが発生しますUncaught TypeError: Cannot read property 'length' of undefined。何かが length プロパティを持つためには、文字列または配列である必要がありval()、jQuery では文字列または複数選択入力の場合は配列を返します。ただし、jQuery オブジェクトが空の場合、val() はundefinedlength プロパティを持たない を返します。

したがって、基本的には、式を次のように書き換えることができます。

if ( varId.length && varId.val().length === 0 ) {
  // Do something
}
于 2013-07-23T09:07:56.700 に答える
0

これを試して

   if ($("#someInputId").val()!= undefined &&
           $("#someInputId").val().length == 0)
于 2013-07-23T08:49:24.833 に答える
0

undefined(つまり、 )の長さを取得しようとしていundefined.lengthます。これは、「Uncaught TypeError」エラーをスローしているものです。

明らかに、$("#someInputId")は定義されていないか、結果を返しません。ほとんど$("#someInputId")の場合、結果は返されず、空のセットの値は未定義です。

$()は常に jQuery オブジェクトをインスタンス化するため、条件チェックは 2 番目の句に到達します。ただし、jQuery オブジェクトが空の場合、その値は未定義になります。

このエラーを回避するには、クエリが結果を返すことを確認する必要があります。

var varId = $("#someInputId");
if (varId.length > 0 && varId.val().length === 0) {

その条件は、#someInputId存在し、値が 0 の場合に true になります。

于 2013-07-23T08:29:32.867 に答える