Jquery陷阱表单提交()
我目前正在使用jquery来捕获表单的提交,并向用户显示一个确认对话框。 如果用户单击是,则表单应提交。 如果用户单击否,则关闭对话框。
这一切都运行良好,但有一个问题:当用户单击是时,然后再次触发相同的代码,并重新打开对话框。
$("#myform").submit(function (event) { if (something) { var $dialog = $('').dialog({ buttons: { "OK": function () { $dialog.dialog('close'); $("#myform").submit(); return; }, Cancel: function () { $(this).dialog("close"); } } }); $dialog.dialog('open'); event.preventDefault(); return false; } else { $("#myform").submit(); } });
我理解为什么会这样,只是不确定最好的解决方法。 我意识到我可以在按钮点击上显示模态,而不是表单提交,但是这并没有解决用户点击键盘上输入按钮提交表单的问题。
因为当您submit
表单时, submit
事件会再次触发,因此事件处理程序也会触发。 当用户说OK
时,您需要unbind
submit
事件处理程序。 试试这个
$("#myform").submit(function (event) { if (something) { var $dialog = $('').dialog({ buttons: { "OK": function () { $dialog.dialog('close'); //Check this line - unbinding the submit event handler $("#myform").unbind('submit').submit(); return; }, Cancel: function () { $(this).dialog("close"); } } }); $dialog.dialog('open'); event.preventDefault(); return false; } else { $("#myform").submit(); } });
OK
时应该返回false:
$("#myform").submit(function (event) { if (something) { var $dialog = $('').dialog({ buttons: { "OK": function () { $dialog.dialog('close'); $("#myform").submit(); return false; // <=== not just return; }, Cancel: function () { $(this).dialog("close"); } } }); $dialog.dialog('open'); event.preventDefault(); return false; } else { $("#myform").submit(); } });
或者删除手册提交:
buttons: { "OK": function () { $dialog.dialog('close'); //$("#myform").submit(); <-- delete it return; },
虽然使用jQuery对象提交表单,但您可以使用jQuery对象引用的DOM元素来提交表单。 这绕过了jQuery事件处理程序。 你的OK函数看起来像这样:
"OK": function () { $dialog.dialog('close'); $("#myform").get(0).submit(); // use the underlying DOM element to sumbit return false; },
我会创建一个命名空间全局或某些隐藏输入的值,如下所示:
var something = nameSpaced.something || $('#hiddenInput').val(); //your choice if (something) { ... } ...
那么你的逻辑应该正常工作。