这对提交按钮无效。一旦用户点击“提交”,请求就已经被发送到服务器。一旦发生这种情况,操作就已经完成了。在这种情况下,你能做的最好的事情就是阻止用户看到他们操作的响应,但是操作仍然会被执行。
此外,唯一阻止用户在另一个请求开始后导航到另一个页面的方法是将用户重定向回他们来自的页面。一般来说,取消请求只是一个纯粹的坏主意™。
对于表单,另一个选择是对所有表单提交使用AJAX。 AJAX请求可以被取消,因此你可以利用这一点,尽管这会使事情变得更加复杂和难以处理。
如果您仍然想继续,尽管知道其影响,您可以使用JavaScript框架(如jQuery、YUI、Dojo、MooTools、ExtJS或Closure)轻松实现此操作 。
以下是在jQuery中执行此操作的示例。正如我所提到的,一旦请求开始,您就无法停止它而不刷新用户所在的页面(以停止当前页面加载),因此我已从此示例中省略了该部分。
$().ready(function() {
function showLoading(){
$loadingOverlay = $('<div id="loadingOverlay"></div>');
$loadingAnimation = $('<div id="loadingAnimation">Loading...</div>');
$("body").prepend($loadingAnimation).prepend($loadingOverlay);
}
$("a[href]").click(showLoading);
$("form").submit(showLoading);
});
要在加载框中添加一个动画 gif,请使用指向您选择的加载 gif 的 <img />
标记替换文本 "Loading..."。这里可以查看此功能的实时演示:http://jsbin.com/opadi
您需要将此 CSS 与上述代码一起使用:
#loadingOverlay {
position: absolute;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
z-index: 1000;
background: #000;
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
#loadingAnimation {
position: absolute;
top: 30%;
left: 50%;
z-index: 1001;
}