防止jQuery对话框提交两次
问题描述:
我想阻止用户提交两次对话框。防止jQuery对话框提交两次
这里是我的代码提交:
$('form', dialog).submit(function() {
if (dialogSubmitted) { return false; }
dialogSubmitted = true;
...
...
});
哪里dialogSubmitted是表示如果表单已经提交的变量。问题是它不起作用。当我打开对话框并按Enter两次(快速)表单提交两次。
有什么想法?
谢谢。
UPDATE
这里是另一个企图也失败了,当我按下回车键两次非常迅速:
$('form', dialog).one('submit', function (evt) {
evt.preventDefault();
$(this).on('submit', function (evt) {
evt.preventDefault();
});
$.post($(this).attr('action'), $(this).serialize(), function (data, status) {
$('#my-modal').modal('hide');
...
...
}).error(function (error, status, a, b) {
$('.modal-body p.body').html(error.responseText);
writeError('msgError', pStopIndex.validationFailed);
});
// Unbind form submitting
$('form', dialog).unbind();
return false;
});
正如你所看到的,我做阿贾克斯后(代替经典表单提交)。也许问题在那里?
这里是谷歌浏览器痕迹的捕捉:
我们可以看到有2个职位。只有当我快速按下确认键两次或快速点击提交按钮两次时才会发生。
有什么想法?谢谢。
答
只是使用one()
方法
参见实施例拨弄:http://jsfiddle.net/MpBCL/
$('form', dialog).one('submit', function (evt) {
/* prevent default action */
evt.preventDefault();
...
/* code to be executed once */
...
/**
* disable default action (this handler will be attached after first
* submit event and it will prevent any further submit action
*/
$(this).on('submit', function (evt) {
evt.preventDefault();
});
});
进一步参考:http://api.jquery.com/one/
描述:附加的处理程序,为元素的事件。处理程序每个元素最多执行一次。
什么禁用提交按钮之前前往POST'$(“#按钮”)ATTR(“禁用”,“禁用”);'我做到这一点,它比存储变量becasue的更好你正在经历的原因。禁用按钮,你不能快速按两次。 – ppumkin 2012-04-26 11:25:59
@ppumkin:好主意,但如果用户通过按回车键提交?即使提交按钮被禁用,用户可以通过按回车键提交?正确? – Bronzato 2012-04-26 11:33:13
@bronzatio ... ummmmmm。不知道哈哈:)从来没有尝试过。 – ppumkin 2012-04-26 12:11:20