【发布时间】:2018-06-01 14:40:51
【问题描述】:
我不是程序员,只是想修复和改进我的联系表。现在它是一个 HTML 表单(名称、电子邮件、4 个复选框作为主题、消息)。和 mail.php(更新:method="POST")。一切正常,我收到所有表单数据。
但我找到了一个脚本来验证姓名、电子邮件和消息输入,这里是:
<script>
$(document).ready(function() {
<!-- Real-time Validation -->
<!--Name can't be blank-->
$('#contact_name').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 must be an email -->
$('#contact_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");}
});
<!--Message can't be blank -->
$('#contact_message').keyup(function(event) {
var input=$(this);
var message=$(this).val();
console.log(message);
if(message){input.removeClass("invalid").addClass("valid");}
else{input.removeClass("valid").addClass("invalid");}
});
<!-- After Form Submitted Validation-->
$("#button").click(function(event){
var form_data=$(".myform").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');
}
});
});
</script>
最初,它在输入字段旁边显示错误消息,我决定不使用它们(HTML 中的跨度,CSS 中的“错误”和“errow_show”类),只留下输入字段突出显示(“有效”绿色/“无效的”红色 CSS 类)。
我觉得问题出在以下几行:
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");}
此脚本会突出显示空名称、无效电子邮件和空消息。但是,当我单击“发送”按钮时,脚本尽管突出显示了无效字段,但仍显示警报“没有错误。表单将被提交”并将表单发送给我。 问题似乎在最后一部分。我不知道如何从这个脚本中正确删除“span”、“error”和“error_show”(第二个 IF 之前的 3 行)。如果所有内容都有效,我希望我的表单将所有内容发送给我,如果某些内容无效,则不发送任何内容(“禁用按钮”?)。没有任何警报。如果它也可以在提交后保持在同一页面上......这将是一个理想的事情(Submit form and stay on same page?,Submit a form using jQuery,jQuery AJAX submit form)。任何帮助将不胜感激!:)
更新:表单 html:(现在删除为不必要的)
更新 2:好吧,伙计们,这个(奇怪?不正确?半正确?)代码我突然做出检查并正确突出显示为“有效”/“无效”所有 3 个必填字段(姓名、电子邮件、消息)并在#button_send 点击时显示正确的警报(稍后我将删除它们),甚至将带有非必需未验证复选框的整个表单发送给我:
$('#button_send').click(function(){
if ($('#contact_name').hasClass('valid') && $('#contact_email').hasClass('valid') && $('#contact_message').hasClass('valid')) {
alert('No errors');
$('.form').submit();
} else {
alert('Errors');
return false;
}
});
感谢大家的每一条建议和帮助。
【问题讨论】:
-
您是否从 html 中删除了跨度?
-
是的,我删除了跨度。以及来自 CSS 的“error”和“error_show”类。
-
不要介意这个 html 和验证脚本中的不同名称(mail.php / process.php、#button / #button_send、#myForm / .form 等),我“同步”他们在测试之前。 ;)
标签: javascript jquery