我正在开发一个项目,当点击提交按钮时,我抓住事件并通过外部服务运行表单以检查某些内容是否有效。
如果出现问题,我会弹出一个对话框,告诉用户存在问题,并为他们提供覆盖选项以继续。
问题是如何触发表单提交。如果我只使用.submit(),它会将表单再次发送到对话框中。
$('#editAddr').submit(function(){
var checkString = addrString();
$.getJSON('/validate.php' + checkString, function(data){
if(data == 0){
var confw = '';
confw += '<div><p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>';
confw += 'Failed validation.</p></div>';
var $dialog = $(confw).dialog({
title: "Validation Problem",
modal: true, resizable: false, width: 500,
buttons: {
"Edit": function(){
$(this).dialog('close');
},
"Override": function(){
$(this).dialog('close');
$('#editAddr').submit();
}
}
});
}else{
$('#editAddr').submit();
}
});
return false;
});
如何通过单击对话框按钮正确提交此表单?
编辑:确保您的表单不包含id =“submit”的按钮,否则您将破坏jQuery .submit()
答案 0 :(得分:4)
而不是绑定到表单的提交事件,而是绑定到提交按钮的click事件。这样,您可以捕获submit事件的click事件,并在需要时返回false,或者继续执行表单上的submit()事件。
$('input[type="submit"]').click(function(e){
e.preventDefault();
if() // invalid data
{
}
else // good to go
{
$('form').submit();
}
})
如果有人禁用JavaScript,此解决方案也会很好地降级。我读过的其他一些解决方案都不允许这样做。
答案 1 :(得分:1)
问题来自你连接逻辑的方式。
表单中的按钮应该是常规按钮,而不是提交按钮
那么,它的onaction属性应该指向上面的方法。
之后,form.submit()应按预期工作。
另一种选择是在方法上添加一个标志。
答案 2 :(得分:1)
只需在表单的dom元素上调用.submit()
。
我认为你可以从jQuery中得到它:
$('#editAddr')[0].submit(); // goes in your Override button logic
答案 3 :(得分:1)
您的问题是在Jquery对象上调用submit会再次通过jquery onsubmit运行它。一旦你完成了验证器,你只需要在DOM对象上调用它 - 你可以用
来实现它document.GetElementById(editAddr).submit();
或
$("#editAddr").get(0).submit();
至少,这是它与验证提交处理程序一起使用的方式。我认为它与标准提交处理程序的工作方式相同。
答案 4 :(得分:0)
添加类似于isOverride或isValid布尔值的内容,您可以在提交函数的开头检查以绕过进一步处理。