我有一个我想要运行的jQuery脚本。如果在按下提交按钮时没有填充文本框,我希望以红色弹出一条消息。我希望此消息弹出到相应的文本框。但是,无论我使用jQuery Script做什么都行不通。
$(document).ready(function() {
$('#firstname').on('input', function() {
var input = $(this);
var is_name = input.val();
if (is_name) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#lastname').on('input', function() {
var input = $(this);
var is_name = input.val();
if (is_name) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#email').on('input', function() {
var input = $(this);
var re = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
var is_email = re.test(input.val());
if (is_email) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#phone').on('input', function() {
var input = $(this);
var re = /^[0-9]{10}$/;
var is_phone = re.test(input.val());
if (is_phone) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#postcode').keyup(function(event) {
var input = $(this);
var re = /^[0-9]{4}$/;
var is_postcode = re.test(input.val());
if (is_email) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$("submit button").click(function(event) {
var form_data = $("#contact").serializeArray();
var error_free = true;
for (var input in form_data) {
var element = $("#contact_" + form_data[input]['name']);
var valid = element.hasClass("valid");
var error_element = $("span", element.parent());
if (!valid) {
error_element.removeClass("error").addClass("error_show");
error_free = false;
} else {
error_element.removeClass("error_show").addClass("error");
}
}
if (!error_free) {
event.preventDefault();
} else {
alert('No errors: Form will be submitted');
}
});
});
.error {
display: none;
margin-left: 10px;
}
.error_show {
color: red;
margin-left: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form id="contact" action="/submit.php" method="post">
First name *:
<input type="text" name="firstname" id="firstname"><span class="error">This field is required</span>
<br/>Last name *:
<input type="text" name="lastname" id="lastname"><span class="error">This field is required</span>
<br/>Email *:
<input type="text" name="lastname" id="email"><span class="error">This field is required</span>
<br/>Phone Number *:
<input type="text" name="lastname" id="phone"><span class="error">This field is required</span>
<br/>Post Code *:
<input type="text" name="lastname" id="postcode"><span class="error">This field is required</span>
<br/>
<input type="checkbox" name="accept" id="accept" id="accept">Please add me to your mailing list *<span class="error">This field is required</span>
<br/>
<span>* required fields</span>
<br/>
<input type="submit" name="submit" value="submit">
</form>
答案 0 :(得分:1)
几个问题:
input
元素需要正确设置name
属性。目前,几乎所有这些都具有值lastname
。click
按钮的submit
处理程序未正确布局。它需要指向:$("input[type=submit]")
。element
变量并未真正正确引用任何input
字段,因为您为此变量形成值的方式是错误的。它应该是这样的:var element = $("input[name=" + form_data[input]['name'] + "]");
。看一下下面的片段。
代码段:
$(document).ready(function () {
$('#firstname').on('input', function () {
var input = $(this);
var is_name = input.val();
if (is_name) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#lastname').on('input', function () {
var input = $(this);
var is_name = input.val();
if (is_name) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#email').on('input', function () {
var input = $(this);
var re = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
var is_email = re.test(input.val());
if (is_email) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#phone').on('input', function () {
var input = $(this);
var re = /^[0-9]{10}$/;
var is_phone = re.test(input.val());
if (is_phone) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#postcode').keyup(function (event) {
var input = $(this);
var re = /^[0-9]{4}$/;
var is_postcode = re.test(input.val());
if (is_email) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$("input[type=submit]").click(function (event) {
var form_data = $("#contact").serializeArray();
var error_free = true;
for (var input in form_data) {
var element = $("input[name=" + form_data[input]['name'] + "]");
var valid = element.hasClass("valid");
var error_element = $("span", element.parent());
if (!valid) {
error_element.removeClass("error").addClass("error_show");
error_free = false;
} else {
error_element.removeClass("error_show").addClass("error");
}
}
if (!error_free) {
event.preventDefault();
} else {
alert('No errors: Form will be submitted');
}
});
});
&#13;
.error {
display: none;
margin-left: 10px;
}
.error_show {
color: red;
margin-left: 10px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<form id="contact" action="/submit.php" method="post">First name *:
<input type="text" name="firstname" id="firstname" /><span class="error">This field is required</span>
<br/>Last name *:
<input type="text" name="lastname" id="lastname" /><span class="error">This field is required</span>
<br/>Email *:
<input type="text" name="email" id="email" /><span class="error">This field is required</span>
<br/>Phone Number *:
<input type="text" name="phone" id="phone" /><span class="error">This field is required</span>
<br/>Post Code *:
<input type="text" name="postcode" id="postcode" /><span class="error">This field is required</span>
<br/>
<input type="checkbox" name="accept" id="accept" id="accept" />Please add me to your mailing list *<span class="error">This field is required</span>
<br/> <span>* required fields</span>
<br/>
<input type="submit" name="submit" value="submit" />
</form>
&#13;
希望这有帮助。
答案 1 :(得分:0)
我被塔希尔击败但是考虑到我在这里写了一半你就去了。
以下是您的代码的工作副本:http://jsfiddle.net/e0wjn5dp/。
需要制作的许多小调整。我会在这里列出它们,如果你需要扩展,请发表评论:
不是挂钩提交按钮的click事件,而是挂钩到表单的提交事件:
$("submit button").click(function(event) {}
变为
$("#contact").submit(function(event) {}
在遍历表单字段时,您尝试查找#contact_firstname的ID,然后#contact_lastname,例如,这些不存在。相反,请查找包含相应名称的表单的子项:
var element=$(this).find("#" + form_data[input]['name']);
在您的邮政编码关键字事件中,您要检查不存在的if (is_email)
,而应该是if (is_postcode)
使用var error_element = $("span", element.parent());
查找错误元素时,将返回所有错误范围。相反,您可以使用next来找到与此字段相关的正确值:
var error_element=element.next("span")
由于您的验证工作原理,有必要在“接受”复选框中添加valid
类,否则验证将始终失败。我还删除了与复选框关联的错误范围,因为它的性质是任何状态都有效。
但是老实说,除非你真的想要了解如何编写自己的验证逻辑,或者有特定的理由自己编写,我只需使用jQuery Validation就可以让你做到你想要的只需要很少的努力。
完整代码:
$(document).ready(function () {
$('#firstname').on('input', function () {
var input = $(this);
var is_name = input.val();
if (is_name) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#lastname').on('input', function () {
var input = $(this);
var is_name = input.val();
if (is_name) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#email').on('input', function () {
var input = $(this);
var re = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
var is_email = re.test(input.val());
if (is_email) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#phone').on('input', function () {
var input = $(this);
var re = /^[0-9]{10}$/;
var is_phone = re.test(input.val());
if (is_phone) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$('#postcode').keyup(function (event) {
var input = $(this);
var re = /^[0-9]{4}$/;
var is_postcode = re.test(input.val());
if (is_postcode) {
input.removeClass("invalid").addClass("valid");
} else {
input.removeClass("valid").addClass("invalid");
}
});
$("#contact").submit(function (event) {
var form_data = $("#contact").serializeArray();
var error_free = true;
for (var input in form_data) {
var element = $(this).find("#" + form_data[input]['name']);
var valid = element.hasClass("valid");
var error_element = element.next("span")
if (!valid) {
error_element.removeClass("error").addClass("error_show");
error_free = false;
} else {
error_element.removeClass("error_show").addClass("error");
}
}
if (!error_free) {
event.preventDefault();
} else {
alert('No errors: Form will be submitted');
}
});
});