Javascript 提交时停止表单刷新页面
如果在字段中没有任何数据的情况下按send按钮,如何防止页面刷新 验证设置工作正常,所有字段变为红色,但随后页面立即刷新。我对JS的了解比较基础 我特别认为底部的Javascript 提交时停止表单刷新页面,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,如果在字段中没有任何数据的情况下按send按钮,如何防止页面刷新 验证设置工作正常,所有字段变为红色,但随后页面立即刷新。我对JS的了解比较基础 我特别认为底部的processForm()函数是“坏的” HTML <form id="prospects_form" method="post"> <input id="form_name" tabindex="1" class="boxsize" type="text" name="name" placeholder="F
processForm()
函数是“坏的”
HTML
<form id="prospects_form" method="post">
<input id="form_name" tabindex="1" class="boxsize" type="text" name="name" placeholder="Full name*" maxlength="80" value="" />
<input id="form_email" tabindex="2" class="boxsize" type="text" name="email" placeholder="Email*" maxlength="100" value="" />
<input id="form_subject" class="boxsize" type="text" name="subject" placeholder="Subject*" maxlength="50" value="FORM: Row for OUBC" />
<textarea id="form_message" class="boxsize" name="message" placeholder="Message*" tabindex="3" rows="6" cols="5" maxlength="500"></textarea>
<button id="form_send" tabindex="5" class="btn" type="submit" onclick="return processForm()">Send</button>
<div id="form_validation">
<span class="form_captcha_code"></span>
<input id="form_captcha" class="boxsize" type="text" name="form_captcha" placeholder="Enter code" tabindex="4" value="" />
</div>
<div class="clearfix"></div>
</form>
发送
JS
$(document).ready(function() {
// Add active class to inputs
$("#prospects_form .boxsize").focus(function() { $(this).addClass("hasText"); });
$("#form_validation .boxsize").focus(function() { $(this).parent().addClass("hasText"); });
// Remove active class from inputs (if empty)
$("#prospects_form .boxsize").blur(function() { if ( this.value === "") { $(this).removeClass("hasText"); } });
$("#form_validation .boxsize").blur(function() { if ( this.value === "") { $(this).parent().removeClass("hasText"); } });
///////////////////
// START VALIDATION
$("#prospects_form").ready(function() {
// DEFINE GLOBAL VARIABLES
var valName = $('#form_name'),
valEmail = $("#form_email"),
valEmailFormat = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
valMsg = $('#form_message'),
valCaptcha = $('#form_captcha'),
valCaptchaCode = $('.form_captcha_code');
// Generate captcha
function randomgen() {
var rannumber = "";
// Iterate through 1 to 9, 4 times
for(ranNum=1; ranNum<=4; ranNum++){ rannumber+=Math.floor(Math.random()*10).toString(); }
// Apply captcha to element
valCaptchaCode.html(rannumber);
}
randomgen();
// CAPTCHA VALIDATION
valCaptcha.blur(function() {
function formCaptcha() {
if ( valCaptcha.val() == valCaptchaCode.html() ) {
// Incorrect
valCaptcha.parent().addClass("invalid");
return false;
} else {
// Correct
valCaptcha.parent().removeClass("invalid");
return true;
}
}
formCaptcha();
});
// Remove invalid class from captcha if typing
valCaptcha.keypress(function() {
valCaptcha.parent().removeClass("invalid");
});
// EMAIL VALIDATION (BLUR)
valEmail.blur(function() {
function formEmail() {
if (!valEmailFormat.test(valEmail.val()) && valEmail.val() !== "" ) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmail();
});
// Remove invalid class from email if typing
valEmail.keypress(function() {
valEmail.removeClass("invalid");
});
// VALIDATION ON SUBMIT
$('#prospects_form').submit(function() {
console.log('user hit send button');
// EMAIL VALIDATION (SUBMIT)
function formEmailSubmit() {
if (!valEmailFormat.test(valEmail.val())) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmailSubmit();
// Validate captcha
function formCaptchaSubmit() {
if( valCaptcha.val() === valCaptchaCode.html() ) {
// Captcha is correct
} else {
// Captcha is incorrect
valCaptcha.parent().addClass("invalid");
randomgen();
}
}
formCaptchaSubmit();
// If NAME field is empty
function formNameSubmit() {
if ( valName.val() === "" ) {
// Name is empty
valName.addClass("invalid");
} else {
valName.removeClass("invalid");
}
}
formNameSubmit();
// If MESSAGE field is empty
function formMessageSubmit() {
if ( valMsg.val() === "" ) {
// Name is empty
valMsg.addClass("invalid");
} else {
valMsg.removeClass("invalid");
}
}
formMessageSubmit();
// Submit form (if all good)
function processForm() {
if ( formEmailSubmit() && formCaptchaSubmit() && formNameSubmit() && formMessageSubmit() ) {
$("#prospects_form").attr("action", "/clients/oubc/row-for-oubc-send.php");
$("#form_send").attr("type", "submit");
return true;
} else if( !formEmailSubmit() ) {
valEmail.addClass("invalid");
return false;
} else if ( !formCaptchaSubmit() ) {
valCaptcha.parent().addClass("invalid");
return false;
} else if ( !formNameSubmit() ) {
valName.addClass("invalid");
return false;
} else if ( !formMessageSubmit() ) {
valMsg.addClass("invalid");
return false;
} else {
return false;
}
}
});
});
// END VALIDATION
/////////////////
});
$(文档).ready(函数(){
//将活动类添加到输入
$(“#prospects_form.boxsize”).focus(function(){$(this.addClass(“hasText”);});
$(“#form_validation.boxsize”).focus(function(){$(this.parent().addClass(“hasText”);});
//从输入中删除活动类(如果为空)
$(“#prospects_form.boxsize”).blur(函数(){if(this.value==”){$(this.removeClass(“hasText”);});
$(“#form_validation.boxsize”).blur(函数(){if(this.value==”){$(this.parent().removeClass(“hasText”);});
///////////////////
//开始验证
$(“#prospects_form”).ready(函数(){
//定义全局变量
var valName=$(“#form_name”),
valEmail=$(“表格电子邮件”),
valEmailFormat=/^([^()[\]\\,;:\s@\“]+(\.[^()[\]\,;:\s@\“]+)*(\“+\”)((\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}])){124;([a-zA Z-0-9]+-zA 0-9].[a-2}.-/,
valMsg=$(“#形式#消息”),
valCaptcha=$(“#格式_captcha”),
valCaptchaCode=$('.form_captcha_code');
//生成验证码
函数randomgen(){
var rannumber=“”;
//迭代1到9,4次
对于(ranNum=1;ranNum您可以阻止表单随
$("#prospects_form").submit(function(e) {
e.preventDefault();
});
当然,在函数中,您可以检查空字段,如果有任何不正确的地方,e.preventDefault()
将停止提交
没有jQuery:
var form = document.getElementById("myForm");
function handleForm(event) { event.preventDefault(); }
form.addEventListener('submit', handleForm);
您可以阻止表单随一起提交
$("#prospects_form").submit(function(e) {
e.preventDefault();
});
当然,在函数中,您可以检查空字段,如果有任何不正确的地方,e.preventDefault()
将停止提交
没有jQuery:
var form = document.getElementById("myForm");
function handleForm(event) { event.preventDefault(); }
form.addEventListener('submit', handleForm);
将按钮类型替换为按钮
:
<button type="button">My Cool Button</button>
我的酷按钮
将按钮类型替换为按钮
:
<button type="button">My Cool Button</button>
我的酷按钮
我个人喜欢在提交时验证表单,如果有错误,只需返回false即可
$('form').submit(function() {
var error;
if ( !$('input').val() ) {
error = true
}
if (error) {
alert('there are errors')
return false
}
});
我个人喜欢在提交时验证表单,如果有错误,只需返回false即可
$('form').submit(function() {
var error;
if ( !$('input').val() ) {
error = true
}
if (error) {
alert('there are errors')
return false
}
});
大多数人会通过调用函数来阻止表单提交
另一种方法是删除按钮的onclick属性,并将processForm()
中的代码输出到中。submit(function(){
作为返回false;
导致表单不提交。另外,使formBlaSubmit()
函数基于有效性返回布尔值,以便在processForm();
katsh的答案是一样的,只是更容易理解
(顺便说一句,我是stackoverflow新手,请给我一些指导。)大多数人都会通过调用函数来阻止表单提交
另一种方法是删除按钮的onclick属性,并将processForm()
中的代码输出到中。submit(function(){
作为返回false;
导致表单不提交。另外,使formBlaSubmit()
函数基于有效性返回布尔值,以便在processForm();
katsh的答案是一样的,只是更容易理解
(顺便说一句,我是stackoverflow的新手,请给我一些指导。)您可以在不刷新页面的情况下使用此代码提交表单。我在我的项目中已经这样做了
$(function () {
$('#myFormName').on('submit',function (e) {
$.ajax({
type: 'post',
url: 'myPageName.php',
data: $('#myFormName').serialize(),
success: function () {
alert("Email has been sent!");
}
});
e.preventDefault();
});
});
您可以在不刷新页面的情况下使用此代码提交表单。我在我的项目中已经这样做了
$(function () {
$('#myFormName').on('submit',function (e) {
$.ajax({
type: 'post',
url: 'myPageName.php',
data: $('#myFormName').serialize(),
success: function () {
alert("Email has been sent!");
}
});
e.preventDefault();
});
});
添加以下onsubmit=“return false”代码:
这为我解决了问题。它仍将运行您指定的onClick函数添加以下onsubmit=“return false”代码:
这为我解决了这个问题。它仍然会运行您指定的onClick函数
函数验证()
{
var username=document.getElementById('username')。值;
如果(用户名==“”)
{
返回false;
}
如果(username.length只需按如下方式输入返回值:
函数验证()
{
var username=document.getElementById('username')。值;
如果(用户名==“”)
{
返回false;
}
如果(username.length当您为用户提供2种提交表单的可能性时,此问题变得更加复杂:
通过点击一个特别的按钮
按回车键
在这种情况下,您将需要一个功能来检测按下的键,如果按下Enter键,您将在其中提交表单
现在IE出现了问题(在任何情况下都是版本11)
备注:
Chrome和FireFox都不存在此问题
- 单击“提交”按钮时,表单将提交一次;很好
- 当您点击Enter键时,表单将提交两次…并且您的servlet将执行两次。如果您没有PRG(post redirect get)体系结构服务器端,那么结果可能会出乎意料
尽管这个解决方案看起来很琐碎,但我花了很多时间来解决这个问题,所以我希望它对其他人有用。
该解决方案已在IE(v11.0.9600.18426)、FF(v40.03)和Chrome(v53.02785.143m64位)上成功测试
源代码HTML和js在代码段中。原理在这里描述。
警告:
无法在代码段中测试它,因为post操作不可用
定义并按Enter键可能会干扰stackoverflow
如果您面临这个问题,那么只需将js代码复制/粘贴到您的环境中,并根据您的上下文进行调整
/*
*通知表格中的要点
*/
var inForm=document.getElementById('
ajax_form('form',
{
before: function()
{
alert('submiting form');
// if return false form shouldn't be submitted
},
success:function(data)
{
console.log(data)
}
}
)[0].submit();
$("#buttonID").click(function (e) {
e.preventDefault();
//some logic here
}
<select id="youId" name="yourName">
<select>
<option value="1</option>
<option value="2</option>
<option value="3</option>
</select>
<input id="formStockVal1" type="number"><br><br>
<form>
<button type="reset" id="stockCancel">Cancel</button>
<button type="reset" id="stockConfirm">Add</button>
</form>
<form action="#" onsubmit="yourJsFunction();return false">
<input type="text"/>
<input type="submit"/>
</form>
onsubmit="xxx_xxx(); return false;"
$("#prospects_form").submit(function(e) {
e.preventDefault();
});
<form id="prospects_form" method="post">
<input id="form_name" tabindex="1" class="boxsize" type="text" name="name" placeholder="Full name*" maxlength="80" value="" required/>
<input id="form_email" tabindex="2" class="boxsize" type="text" name="email" placeholder="Email*" maxlength="100" value="" required/>
<input id="form_subject" class="boxsize" type="text" name="subject" placeholder="Subject*" maxlength="50" value="FORM: Row for OUBC" required/>
<textarea id="form_message" class="boxsize" name="message" placeholder="Message*" tabindex="3" rows="6" cols="5" maxlength="500"></textarea>
</form>
function loadForm(){
var loginForm = document.querySelector('form'); //Selecting the form
loginForm.addEventListener('submit', login); //looking for submit
}
function login(e){
e.preventDefault(); //to stop form action i.e. submit
}
<form onsubmit="myFunction(event)">
Name : <input type="text"/>
<input class="submit" type="submit">
</form>
<script>
function myFunction(event){
event.preventDefault();
//code here
}
</script>
<FORM NAME=frm1 ...>
Name: <input type=textbox name=txtName id=txtName>
<BR>
<input type=button value="Submit" onclick=Validate()>
<Script>
function Validate() {
Msg = ""
// Check fields
if(frm1.txtName.value fails this) {
Msg += "\n The Name Field is improper"
}
// Do the same for the rest of the form
if(Msg == "") {
frm1.submit()
} else {
alert("Your form has errors\n" + Msg)
}
}
</SCRIPT>