jquery validationでelementがundefinedであるとのエラーが発生した。
原因特定に非常に時間を要したので同じ問題にあった人のために詳細と対策を公開する。
エラー発生ポイントは、jquery.validation.min.jsを整形した状態で23行目の
b = c.element(this) && b;
という行。cがundefinedになっていた。
当該行の前後は下記の通り
valid: function () {
var b, c;
return a(this[0]).is("form") ? b = this.validate().form() : (b = !0, c = a(this[0].form).validate(), this.each(function () {
b = c.element(this) && b;
})), b;
}
発生状況は次の通り。
- あるformタグ内のjquery dialogで利用するためのdivを設置。
- jquery dialogでdiv要素をdialog化。
- formに対しvalidateをかける。
- dialog内の
<input type="file">
でファイルを選択。 - そのフォーカスがinputからはずれた瞬間にjquery validationがエラーを投げた。
原因の可能性としては、もともとform内にあったinput要素がdialog化することでformブロックの外に再定義され、jquery validationがinputのformを見失ったことが問題となったと考えられる。
対策として、dialogに使用するdiv要素を最初からformの外で定義したところ、エラーは発生しなくなった。