Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQueryUI';s blockUI不适当地阻塞_Javascript_Jquery_Asp.net Mvc 3_Jquery Ui - Fatal编程技术网

Javascript jQueryUI';s blockUI不适当地阻塞

Javascript jQueryUI';s blockUI不适当地阻塞,javascript,jquery,asp.net-mvc-3,jquery-ui,Javascript,Jquery,Asp.net Mvc 3,Jquery Ui,我正在制作一个电子商务Web应用程序(在MVC3中),现在我正在测试它。我的问题是:每当有人在提交按钮上多次单击时,我都会发出同样多的请求,并将其保存到数据库中的次数也一样多。因此,我正在实现一些客户端和服务器端代码,以防止这些多次提交。客户端包括在有人单击提交按钮时屏蔽屏幕,如下所示: $(document).ready(function () { $('input[type=submit]').click(function () { blockScreen();

我正在制作一个电子商务Web应用程序(在MVC3中),现在我正在测试它。我的问题是:每当有人在提交按钮上多次单击时,我都会发出同样多的请求,并将其保存到数据库中的次数也一样多。因此,我正在实现一些客户端和服务器端代码,以防止这些多次提交。客户端包括在有人单击提交按钮时屏蔽屏幕,如下所示:

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

    $.unblockUI();
}
function blockScreen() {
    $.blockUI({ message: '<h1><img src="../images/processing.gif" /></h1>' 
});
$(文档).ready(函数(){
$('input[type=submit]')。单击(函数(){
区块屏幕();
});
$.unbui();
}
功能块屏蔽(){
$.blockUI({消息:“”
});
我在blockUI中遇到的问题是,当有人单击提交,但出现ModelState错误(如未填充必填字段)时,屏幕被阻止,除非重新加载或使用浏览器控制台,否则无法取消阻止


服务器端验证,这样它就不会复制了,以后我会做的,所以不需要考虑这个问题…

< P>你可能是在使用Ajax请求把数据发送到你的数据库,对吗? 无需使用“单击”事件。 有人只需在输入字段中按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;
    }
  });


});

`

您可能正在使用AJAX请求向数据库发送数据,对吗

无需使用“单击”事件。 有人只需在输入字段中按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;
    }
  });


});

`

我找到了答案……根据krish的建议,我添加了以下脚本:

到我的主视图,并在我的js上使用:

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

我找到了答案…根据krish的建议,我添加了以下脚本:

到我的主视图,并在我的js上使用:

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

为什么不从模型代码中屏蔽屏幕,即仅在发送请求时(当然,在有结果时删除它)?调用函数blockScreen()当验证为真时。@Bergi你说的从模型代码中阻止屏幕是什么意思?我不会阻止整个屏幕,除非你真的想这样做,相反,可能只是禁用按钮几秒钟或更长时间。看起来问题不在于javascript,除非添加html,否则会导致验证失败。为什么不呢您从模型的代码中屏蔽屏幕,即仅在发送请求时(当然,在有结果时将其删除)?调用函数blockScreen()当验证为真时。@Bergi你说的从模型代码中阻止屏幕是什么意思?我不会阻止整个屏幕,除非你真的想这样做,相反,可能只是禁用按钮几秒钟或更长时间。看起来问题不在于javascript,除非添加html,否则会导致验证失败。