jQueryを使用して自家製のバリデーターを構築しようとしています。jQueryに制限があると思います:jQuery値をjson変数に割り当て、jQueryを使用して、変数のクエリに適合する現在のページにDOM要素を追加すると、それらのDOMにアクセスする方法がないようです。 json変数のクエリに適合する要素がページに追加されました。
次のコードを検討してください。
var add_form = {
$name_label: $("#add-form Label[for='Name']"),
$name: $("#add-form #Name"),
$description_label: $("#add-form Label[for='Description']"),
$description: $("#add-form #Description"),
$submit_button: $("#add-form input#Add"),
$errors: $("#add-form .error"),
error_marker: "<span class='error'> *</span>"
}
function ValidateForm() {
var isValid = true;
add_form.$errors.remove();
if (add_form.$name.val().length < 1 ) {
add_form.$name_label.after(add_form.error_marker);
isValid = false;
}
if (add_form.$description.val().length < 1) {
add_form.$description_label.after(add_form.error_marker);
isValid = false;
}
return isValid
}
$(function(){
add_form.$submit_button.live("click", function(e){
e.preventDefault();
if(ValidateForm())
{
//ajax form submission...
}
});
})
例はここで利用可能です:http://jsfiddle.net/Macxj/3/
まず、htmladdフォームを表すjson変数を作成します。次に、フォームを検証する関数を作成します。最後に、フォームの送信ボタンのクリックイベントをフォームの検証にバインドします。
jQuery after()メソッドを使用して、フォーム内のすべての無効なフィールドラベルの後に「*」を含むスパンを配置していることに注意してください。また、フォームを再検証する前に、フォームから前回の送信試行のアスタリスクをクリアしていることに注意してください(これが失敗します)。
どうやら、add_form。$ errors.remove();への呼び出し。$ errors変数は、作成時にクエリに一致したDOM要素のみを指すため、機能しません。その時点では、どのラベルにもerror_marker変数の接尾辞は付いていませんでした。
したがって、jQuery変数は、変数が最初に割り当てられたときに存在していなかったため、それらを削除しようとしたときに、クエリの一致する要素を認識しません。jQuery変数にeval()メソッドがあり、それに含まれるクエリを再評価して、新しいDOM要素がそれに一致するかどうかを確認すると便利です。しかし悲しいかな...
助言がありますか?
前もって感謝します!