我正在尝试在着陆页上制作一个简单的电子邮件表单。出于测试目的,我不想实际提交表单。但每次我点击它,它都会阻止我阻止默认的尝试。无论我如何退出submit()函数,它都坚持提交此表单!
$(document).ready( function () {
function validateEmail($email) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if( !emailReg.test( $email ) ) {
return false;
} else {
return true;
}
}
$("#email_box").click( function () { $(this).val(''); } );
$("#email_form").click(
function(e) {
var valid = validateEmail($("#email_box").val());
if (!valid)
{
$("#error_msg").fadeIn("slow");
} else {
$("#error_msg").style("display", "none");
$("#email_box").val("Thanks, you'll hear from us soon!").fadeIn("slow");
//$("#thank_you_msg").fadeIn("slow");
}
e.preventDefault();
return false;
}
);
});
为什么仍然要发送请求?
对我来说,最奇怪的是,如果表格无效,则不提交。但如果表格实际上有效,则提交!!
答案 0 :(得分:7)
唯一可能的选项(如果真的是表单名称......)是你的代码在DOM准备好之前执行。
将它放在DOM ready回调中:
$(function(){
$("#email_form").submit(function(e) {
e.preventDefault();
});
});
检查你的处理程序是否会被解雇是明智之举!
$(function(){
$("#email_form").submit(function(e) {
alert('Fired!'); // <<<<<=====
e.preventDefault();
});
});
答案 1 :(得分:4)
我刚刚实现:您使用的是点击未提交:
it should be : $("#email_form").submit(function(e){});
not: $("#email_form").click(function(e){});
函数应该在dom之外声明!如果你把防止默认作为第一件事,即使有错误也不会提交!
function validateEmail($email) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if( !emailReg.test( $email ) ) {
return false;
} else {
return true;
}
}
$(document).ready( function () {
$("#email_box").click( function () { $(this).val(''); } );
$("#email_form").submit(function(e){
e.preventDefault();
var valid = validateEmail($("#email_box").val());
if (!valid)
{
$("#error_msg").fadeIn("slow");
} else {
$("#error_msg").style("display", "none");
$("#email_box").val("Thanks, you'll hear from us soon!").fadeIn("slow");
//$("#thank_you_msg").fadeIn("slow");
}
return false;
});
});
必须有一个javascript错误或者它首先没有绑定事件,请确保你有html:
<form id='email_form' ></form>
$(function(){/*code*/});
$
var use jQuery("#email_form").submit();
而不是$ 答案 2 :(得分:2)
尝试绑定click事件并阻止默认值。
$("#your-submit-button").bind('click', function(e){e.preventDefault()});
答案 3 :(得分:1)
你在$("#email_form")
里面说它是表单ID然后你应该使用
$("#email_form").submit(function(e){
e.preventDefault();
// other code
});
而不是
$("#email_form").click(function(e){...});
和表单的ID应为“email_form”,如
<form id="email_form" method="post" action="something">
<!-- Inputs Here -->
</form>
非常简单fiddle here。
您已更改了问题,现在您想在验证返回true时提交,
var valid = validateEmail($("#email_box").val());
if (!valid)
{
$("#error_msg").fadeIn("slow");
}
else
{
$(this).submit(); // This line will submit the form.
}
答案 4 :(得分:0)
尝试新的“on”事件语法。
$(document).ready(function() {
$('form').on('submit', function(e){
e.preventDefault();
// your validation code here
});
});