我已阅读此thread以重新启用提交方法的preventDefault()。但这对我的情况不起作用。我尝试使用$(this).unbind('submit').submit()
再次启用它。我把它放在POST方法中,然后打开JQuery Colorbox对话框。在该对话框中,还有一个提交按钮,但也无法单击该按钮。所以我必须重新启用preventDefault(),以便可以单击该按钮。
$("#Username, #Password").keypress(function(e){
if (e.which == 13 ) {
$("form:first").submit(function(e){
e.preventDefault(); //interrupt submit process
var userdata = {username : $("#Username").val() };
$.ajax({
type: 'POST',
url: 'http://localhost/test/test.php',
data: userdata,
success: function(data){
if(data==0){
$(this).unbind('submit').submit(); //enable it again(but it didn't worked!)
$.fn.colorbox({width:"50%", inline:true, href:"#reminder_dialog" })} //JQuery Colorbox opened.
else {
$(this).submit();
}
},
async:false
});
});
}
});
我也尝试过使用$(this).trigger('submit')
和$(this).get(0).allowDefault = true
,但这些也无效。
答案 0 :(得分:0)
我会把钱花在e代表按键事件的事实上,后来成为提交事件。
我真的只是在我的脑海中说这个并且夜晚很长,但是尝试将提交的参数e更改为其他东西(例如ev)并在ev上调用preventDedault,如下所示:
....
$("form:first").submit(function(ev){
ev.preventDefault(); //interrupt submit process
....
或者你可以使用return false;在提交功能结束时。 见:event.preventDefault() vs. return false
答案 1 :(得分:0)
那么,您想保护表格形式双重提交吗?您只需绑定一次提交事件。
$("form:first").submit(function(e) {
e.preventDefault(); //interrupt submit process
var $this = $(this); // Form jQuery object
if ($this.data('busy')) return; // Protect this form from double submitting
$this.data('busy', true); // Set the form as busy (we are sending something now)
var userdata = {
username: $("#Username").val()
};
$.ajax({
type: 'POST',
url: 'http://localhost/test/test.php',
data: userdata,
success: function(data) {
$this.data('busy', false); // Form is not busy anymore
if (data == 0) {
// Do your stuff. I don't understand what do you need here.
} else {
// Do your stuff. I don't understand what do you need here.
}
},
async:false
});
});
而且,如果您使用<input>
字段,则无需编写任何相关代码,当您按Enter键时,它们将提交表单。但以防万一:
$("#Username, #Password").keypress(function(e) {
if (e.which == 13) {
$("form:first").submit();
}
});
<强>更新强> 那么,你必须存储表单提交状态。
$("form:first").submit(function(e) {
e.preventDefault(); //interrupt submit process
var $this = $(this); // Form jQuery object
var state = $this.data('state');
if (state == 'busy') {
return;
} else if (state != 'colorbox') {
// Set the state that we are showing colorbox
$this.data('state', 'colorbox');
// Show your colorbox or whatever
// ...
return;
}
$this.data('state', 'busy');
// Submit with that AJAX code
// ...
});
您可以从以下任何位置设置提交状态:
$("form:first").data('state', 'chilling');
您可以从以下任何地方提交表单:
$("form:first").submit();