我正在创建一个ASP.NET MVC 5应用程序。用户点击"提交"之间有很长的等待时间。按钮和下一页要加载,所以我想要#34;请等待"仅当用户提交了有效表单时,才会弹出模式。
我尝试了以下代码,无论表单是否有效,都会弹出模式:
V
我的应用程序使用了jQuery Validate插件和不显眼的验证,这些都是在创建MVC应用程序时提供的,所以我尝试了这段代码:
$('form').submit(function () {
$('#waitingModal').show();
});
但是我收到以下错误:
TypeError:$(...)。valid不是函数
NuGet Manager说我正在使用jQuery版本1.11.1,jQuery Validate 1.11.1和jQuery Unobtrusive 3.2.3。
我在代码中遗漏了什么?还有另一种方法吗?
答案 0 :(得分:0)
感谢您的评论和this post,我能够解决我的问题。在这里为遇到此问题的任何人发布解决方案...
我将.validate()添加到我的代码中,如下所示:
$('form').submit(function () {
$(this).validate();
if ($(this).valid()) {
$('#waitingModal').show();
}
});
但遇到了同样的错误:
TypeError:$(...)。validate不是函数
在谷歌搜索并找到this post后,我想我会尝试重新安排我的脚本标签。即使我的jQuery脚本标记位于我的Layout.cshtml中,我还需要将脚本标记移动到脚本标记列表底部的窗体视图上的jQuery Validate。现在模式正好突然出现了我想要的样子。
修改强>
根据其他用户的评论,我删除了.validate();从我的代码。所以我的代码又回到了这个:
$('form').submit(function () {
if ($(this).valid()) {
$('#waitingModal').show();
}
});
正如用户所说,代码运行完全正常,没有.validate();事实证明我唯一的问题是我的脚本标签的顺序。
答案 1 :(得分:-1)
您需要使用JQuery的Ajax Callback函数。它可能是一个Http Post或Get Call。为您提交"提交"方案,它应该是一个POST电话。
例如:
var element = $('#dialogContent');
element.html('please wait...');
element.dialog("open");
$.ajax(url, {
data: { "_": $.now() },
contentType: 'text/html',
dataType: 'html',
type: 'POST'
}).done(function (data) {
setTimeout(function () {
element.html(data);
}, 100);
return false;
}).fail(function (error) {
element.html('Show error information here..');
}
);