【发布时间】:2014-11-19 06:08:27
【问题描述】:
我有以下表格(内容因无关已被删除):
<form id="ticketinfo" class="form-horizontal" action="<?php echo base_url('customerinfo'); ?>" method="post">
<fieldset>
<input type="submit" value="Add Ticket" class="btn-style-green" id="btnAdd" />
<input type="submit" value="Next >>" class="purchase-your-ticket col-md-3" id="next">
</fieldset>
</form>
这是我的 JavaScript:
$('#btnAdd').click ( function () {
$('form#ticketinfo').submit (
function (event)
{
event.preventDefault(); //Avoid that the event 'submit' continues with its normal execution, so that, we avoid to reload the whole page
$.post(
url+"ticketinfo/add", //The variable 'url' must store the base_url() of our application
$("form#ticketinfo").serialize(), //Serialize all the content of our form to URL format
function (response)
{
}
);
});
});
它的作用:
当我点击#btnAdd 时,它会通过 AJAX 提交带有指定 URL 的表单。当我单击#next 时,它会向表单的“操作”中指定的目标 URL 发送常规(不是 AJAX)帖子,执行代码块并将我重定向到另一个页面。
在我点击#btnAdd 之前,这两个按钮都按应有的方式工作。当我在单击#btnAdd 后单击#next 时,表单通过 AJAX 提交到 jQuery 函数中指定的 URL,而不是向服务器发送普通帖子。
简而言之,如果我先点击#btnAdd,#next 将执行#btnAdd 的工作。
两个按钮真正应该做什么:
`#btnAdd` - submit form via AJAX
`#next` - submit form via regular post and redirect user.
我还应该补充一点,我希望在表单提交时触发按钮验证事件,而不必编写额外的代码来处理表单验证。
【问题讨论】:
-
将 btnAdd 的类型更改为“按钮”。
-
你的括号和大括号没有正确平衡。
-
是的,我正在尝试正确安排它们,现在给我一分钟。
-
当您第一次单击
#btnAdd时,您将表单的提交处理程序更改为$('form#ticketinfo').submit()。如果这不是您希望提交按钮执行的操作,您为什么要更改提交处理程序? -
一般来说,将一个事件处理程序绑定到另一个事件处理程序中很少是正确的。尤其是如果您没有其他东西解除绑定 - 否则,如果外部事件发生多次,您最终会得到多个处理程序。