Javascript jQueryUI';s blockUI不适当地阻塞
我正在制作一个电子商务Web应用程序(在MVC3中),现在我正在测试它。我的问题是:每当有人在提交按钮上多次单击时,我都会发出同样多的请求,并将其保存到数据库中的次数也一样多。因此,我正在实现一些客户端和服务器端代码,以防止这些多次提交。客户端包括在有人单击提交按钮时屏蔽屏幕,如下所示: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();
$(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,否则会导致验证失败。