我有一个基于HTML / PHP的表单,有两个提交按钮 - 一个在顶部,一个在底部。我需要阻止人们多次按提交(从而在我们的数据库中创建多个记录),所以我使用了here找到的技术,以便在点击提交按钮时禁用它,以及文本按钮从“提交”更改为“正在提交;请稍候......”。
我现在有两个问题:
以下是代码的相关摘要。如果我删除禁用/修改按钮的代码,表单会正常提交(但当然我没有得到我正在寻找的功能)。
表格标签:
<form name="MyInquiry" method="post" autocomplete="off" onsubmit="document.getElementById('submitButtonTop').disabled=true;document.getElementById('submitButtonTop').value='Submitting, please wait...';document.getElementById('submitButtonBottom').disabled=true;document.getElementById('submitButtonBottom').value='Submitting, please wait...';return validateInquiryForm();">
按钮的标签:
<input type="submit" name="submitinquiryform" id="submitButtonTop" value="Submit Form" />
<input type="submit" name="submitinquiryform" id="submitButtonBottom" value="Submit Form" />
验证功能:
function validateInquiryForm() {
var valid = true;
var errorMessage = "";
var emailFilter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
... code to validate individual fields ...
if (!valid)
alert(errorMessage);
return valid;
}
谢谢, 约翰
答案 0 :(得分:1)
onsubmit="
document.getElementById('myButtonTOP').disabled=true;
document.getElementById('myButtonTOP').value='Submitting, please wait...';
document.getElementById('myButtonBOTTOM').disabled=true;
document.getElementById('myButtonBOTTOM').value='Submitting, please wait...';
return true;"
当然,最好调用<script></script>
区域中声明的javascript函数。
所以我会写一个像......这样的函数。
var mySubmitted = false;
function MyCheckSubmit()
{
if (mySubmitted)
return false; // Already submitted!
if (!validateInquiryForm())
return false; // Validation failed!
// disable submit buttons
document.getElementById('myButtonTOP').disabled=true;
document.getElementById('myButtonTOP').value='Submitting, please wait...';
document.getElementById('myButtonBOTTOM').disabled=true;
document.getElementById('myButtonBOTTOM').value='Submitting, please wait...';
// Store in our global variable that we submitted this form.
mySubmitted = true;
return true; // Ok, we can submit!
}
当然还有
形式onsubmit="return MyCheckSubmit();"
如果您在输入文本框中按下多次“输入”键,这也会有效,因为它使用内部变量来检查表单是否已经提交。
注意在表单之前声明脚本块,可能在head部分。
答案 1 :(得分:1)
你可以这样做......使用jquery。给两个按钮同一个类说“SUBMIT”。现在编写以下代码:
var myForm = document.forms[0];
$(document).ready(function(){
$(".SUBMIT").click(function(){
if(validateInput()){
$(".SUBMIT").attr("disabled", true).val("Submitting..");
var url = "any URL you like";
var data = {
field1: myForm.field1.value,
field2: myForm.field2.value,
.
.
};
$.post(url, data,
function(Result){
alert(Result); // Write whatever logic you want
}
)
.complete(function(){
$(".SUBMIT").attr("disabled", false).val("Submit");
})
.error(function(){
alert("Some error");
$(".SUBMIT").attr("disabled", false).val("Submit");
});
}
else{
alert("Enter the missing fields first"); // Write whatever your logic
}
});
});
function validateInput(){
if (all fields are entered) // Write you logic here
return true;
else
return false
}
代码应解决您的第一个问题。对于第二个问题,您必须显式编写代码来测试函数 validateInput() 中每个字段的真实性。
答案 2 :(得分:0)
您可以在满足表单验证条件时将其置于正确的状态,因此仅在提交时禁用,您需要在此处返回“this”作为参考
onsubmit="return MyCheckSubmit(this);"
var topButton = document.MyInquiry.submitinquiryform; // top
var botomButton = document.otherMyInquiry.submitinquiryform; // bottom
if(beingSubmitted.name == "MyInquiry"){
topButton.value = "Please wait...";
//beingSubmitted.action = "process.php" // action page
beingSubmitted.submit();
}else{
//beingSubmitted.action = "process2.php" // action page
botomButton.value = "Please wait...";
beingSubmitted.submit();
}
//beingSubmitted.action = "process.php" // action page would handle for both form you could check which form is being submitted by sending a value in a hidden filed
topButton.disabled = true;
botomButton.disabled = true;
我注意到你在表格上没有采取行动