jQueryUI的阻止不当阻止

时间:2012-09-25 17:19:31

标签: javascript jquery asp.net-mvc-3 jquery-ui

我正在制作一个电子商务网络应用程序(在MVC3中),现在我正在测试它。我的问题是:每当有人在提交按钮上多次点击时,我会发出尽可能多的请求并将其保存在db上。所以我正在实现一些客户端和服务器端代码来防止这些多次提交。只要有人点击这样的提交按钮,客户端就会阻止屏幕:

$(document).ready(function () {
    $('input[type=submit]').click(function () {
        blockScreen();
    });

    $.unblockUI();
}
function blockScreen() {
    $.blockUI({ message: '<h1><img src="../images/processing.gif" /></h1>' 
});

我遇到的问题是,当有人点击提交但有一个ModelState错误(例如未填写的必填字段)时,屏幕被阻止,除非重新加载或使用浏览器的控制台,否则无法解除阻止

服务器端验证所以它不会复制我稍后会做,所以不需要考虑这个问题......

2 个答案:

答案 0 :(得分:1)

我找到了答案......按照krish的建议,我添加了这个脚本:

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>到我的主视图并在我的js上使用它:

$('form').submit(function () {
    if ($(this).valid()) {
        blockScreen();
    }
});

答案 1 :(得分:0)

可能您正在使用AJAX请求将数据发送到您的数据库,对吗?

无需使用'click'事件。 有人可以通过在输入字段中按Enter键来提交表单,我不确定在这种情况下会触发click事件。

我认为你应该使用类似的东西:

var isBlocked = false;

$('form').submit(function(){

  $.ajax({
    url: 'database.html',
    beforeSend: function (data) {
       var state = isBlocked;
       isBlocked = true;
       // Returning false in the beforeSend function will cancel the request.
       return !state;
    },
    complete: function(data) {
       // complete executes on both success and fail
       isBlocked = false;
    }
  });


});

`