これは、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() はundefined
length プロパティを持たない を返します。
したがって、基本的には、式を次のように書き換えることができます。
if ( varId.length && varId.val().length === 0 ) {
// Do something
}