作業中のフォームがあり、検証JavaScript(jQueryおよびjQuery検証プラグイン)がある程度まで機能します。動作状態で表示するようにjsfiddleを設定しました:http://jsfiddle.net/5Ukv2/
ただし、errorPlacement関数/パラメーターを使用すると壊れます。エラーは指定した場所に移動しますが、入力(つまり、キーストローク)を更新するたびに複数のエラーが追加され、JavaScriptに従ってエントリが有効な場合、エラーはHTMLから削除されません: http:/ /jsfiddle.net/5Ukv2/1/
また、入力フィールドに入力するとすぐに検証が開始されます。この問題は、余分な削除されていないエラー要素と比較して軽微です。
私は何が間違っているのですか?
jsfiddlesと同様に参照用に以下に添付されたコード。ここでは機能しないajax呼び出しを行っているため、いくつかのメソッドにコメントしましたが、検証は同じように機能します。
HTML:
<form action = "email_submit.php" method = "post" name = "enterForm" id = "enterForm"> <labelfor = "email">再生するメールアドレスを入力してください: <input type = "text" name = "email" id = "email" value = "" /> <input type = "submit" value = "Enter" name = "submit" class = "submit" /> </ form>
JavaScript:
// JavaScript Document
$(function(){
$("#enterForm").validate({
rules: {
email: {
email: true,
required: true,
remote: {url:"email_valid.php", async:false}
}
},
messages:{
email:{
email: "Please enter a valid email address",
required: "Please enter an email address",
remote: "That is not a valid domain"
}
},
submitHandler: function(form) {
var formData = $('form').serialize();
$.ajax({
type: 'POST',
url: "email_submit.php",
data: formData,
success: function(data){
if(data.subscriber && data.valid_email)
window.location = "calendar.html";
else if( !data.valid_email)
alert("Please enter a valid email");
else if( !data.subscriber)
alert("Open sign up form");
},
error: function(data){
alert("e:" + data);
console.log(data);
},
dataType: "JSON"
});
return false;
},
errorPlacement: function (error, element){
if( element.attr("name") == "email" ){
error.insertAfter("#enterForm");
}
else
error.insertAfter(element);
}
});
});