当我禁用提交按钮(在表单提交之后)时,页面不会加载
When I disable submit button (after form submit) the page does not load
我有一个HTML表单,它通过POST提交到另一个页面。它没有什么特别之处,只是在表单验证后,我试图隐藏和/或禁用提交按钮,使其无法进行双重提交,同时告诉用户下一页可能需要一段时间才能加载。
相关代码为:
jQuery(document).ready(function () {
jQuery("form#form").submit(function() {
var result = validate();
jQuery(this).find('input[type=submit]').prop('disabled', true);
jQuery("#submit-button-wrapper").html(jQuery("#submit-button-wrapper").html()+
"<br/><br/><span style='margin: 25px; padding: 5px; background: yellow; "+
"width: 100%; font-weight: bold;'>Loading... this may take a few minutes! "+
"<i class='fa fa-spinner fa-spin' style='color: blue;'></i></span>");
return result;
});
});
function validate() {
return true; // Does stuff, then returns a simple true or false
}
根据请求,这里是(非常简单的)按钮包装HTML:
<div class="col-sm-12" id="submit-button-wrapper">
<input type="submit" value="One More Step" />
</div>
当我删除更改按钮包装器HTML的时,表单将按预期提交。然而,当我有这一行时,它仍然调用下一个页面并执行该代码,而显示的页面永远不会改变。
我在Chrome和Firefox上都测试过,所以我知道这不是浏览器的问题,但这真的很奇怪。我做错了什么?
我的目标是:(1)验证用户的输入,(2)向用户提供页面加载需要一段时间的线索,(3)一旦action="complete.php"
页面上的PHP运行完毕,就显示它的输出。
也许您可以使用$ajax实现这一点,并在同一页面上显示结果。
- 将POST数据发送到/some.php
- 发送数据后,向更改按钮行为的用户提供反馈
- 任务完成后,接收数据,验证成功或错误,并采取相应行动。如果OK,将按钮文本更改为"complete!"或其他内容,并将响应数据附加到某个div中。如果NOT OK,也给出反馈
代码中:
$("form#form").submit(function(e) {
e.preventDefault();
$.ajax({
method: "POST",
url: "some.php",
data: $(this).serialize(),
dataType : 'json',
timeout: 2000,
cache: false,
afterSend: function() {
/*change button behavior here*/
},
success: function(result) {
if (result === "ok"){
/*maybe append data to div and update button text to complete*/
} else {
/*if result not ok, send feedback*/
}
}
});
});
BTW:ajax文档http://api.jquery.com/jquery.ajax/
如果返回true(如果已验证),则提交表单。但是,您正在更改DOM/submit按钮包装器,并从本质上删除了submit按钮,对吧?很可能这就是造成你问题的原因。不要使用提交按钮包装器。如果您想显示一条消息,将其显示为覆盖,或者隐藏提交按钮包装并在其位置显示消息包装,请不要完全删除提交按钮。
我知道您只是显示了脚本中的jQuery和HTML部分,但这还不足以解决您的问题。因为您提到了action="complete.php"
,但我在您的jQuery或HTML代码示例中没有看到这一点,所以似乎并不是所有的内容都在那里。所以我有一些自己的问题。
-
表格是小的还是大的。如果它是一个小表单,那么为什么不在提交页面上显示输出呢?你可以用你目前拥有的东西来做到这一点,但一个PHP或ASP页面可以节省你需要制作的页面数量。顺便说一句,根据表单的大小,您可以在同一页上进行验证,或者在较大的情况下继续使用
action=""
。 -
您是否需要数据库文件,或者正在保存到数据库文件中?如果你这样做了,你可以写入数据库文件,让提交打开下一个页面,并在新页面上查看数据库中保存的内容。同样,您可能可以使用单个PHP或ASP页面。
-
最后一部分听起来更符合你的目的。您可以使用
location.href="http://www.domain.com/home.html";
或者使用CCD_ 5重定向到新页面。
关于其他人的一些评论的另一个问题。
-
您并不完全需要
+
,除非您将其中的每一个划分为各自独立的行,而您只需使用一行即可。这可能就是Rajesh对'
感到困惑的原因。事实上,我不知道你自己为什么在提到Rajesh关于"concat string"answers"append"的评论时提到+
,因为这两者与+
无关。事实上,猜测一下,他可能指的是你的jQuery("#submit-button-wrapper").html(jQuery("#submit-button-wrapper").html()
,它看起来有点像一个concat字符串。 -
说到追加,这不是真正需要的,除非你正在做一些事情,比如给用户一个向表单问题添加行的选项。
- 在chrome.tabs.onCreated之后加载HTML页面
- 为什么元素的宽度在页面加载之后和那一刻之后不同
- 在重新加载之后检测窗口的存在
- 如何让C#代码在页面加载时运行的jquery脚本之后运行
- 在第一页加载时隐藏字段,而不是在php发布之后
- angularjs-ui路由器父状态,参数加载在子状态之后
- 在Ajax(过滤器)加载之后加载jQuery脚本
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- 保持 JavaScript 在浏览器控制台中运行,即使在新的页面加载之后也是如此
- Boostrap远程模式:将动画延迟到加载之后
- 将img加载推迟到页面加载之后
- 在SVG加载之后修改它
- Angular.js控制器在视图加载之后加载
- 在css加载之后、图片下载之前运行代码
- 在页面加载之后而不是在初始阶段删除可见绑定
- 调用函数一次,仅在JQuery创建的图像被加载之后
- 附加& # 39;onclick # 39;事件到SVG元素'在加载之后
- 在<a>标记在窗口加载之后()
- 如何将某些HTML的显示延迟到javascript加载之后
- 保持前一个jquery全局变量的值不变,即使在加载之后也是如此