Javascript 我如何说服这个jQuery按钮点击事件[在Safari中]提交正确的表单?

Javascript 我如何说服这个jQuery按钮点击事件[在Safari中]提交正确的表单?,javascript,jquery,safari,Javascript,Jquery,Safari,在jQuery“ready”块中,我有: // bind print work order button to form submit $('#print_work_order_button').click(function(){ $('#print_work_order_form').submit(); }); 。。。在HTML中(忽略变量替换代码…工作正常): 我最近唯一的改变是将这个验证例程移动到“ready”块中,所以我认为这就是问题所在,但我不知道如何修复。我需要在“就绪”块

在jQuery“ready”块中,我有:

// bind print work order button to form submit
$('#print_work_order_button').click(function(){
    $('#print_work_order_form').submit();
});
。。。在HTML中(忽略变量替换代码…工作正常):

我最近唯一的改变是将这个验证例程移动到“ready”块中,所以我认为这就是问题所在,但我不知道如何修复。我需要在“就绪”块中进行验证,以使其正常工作。。。那么,如何修复我的另一个无关表单提交


注意:奇怪的是,这似乎是一个仅限于Safari的bug。我还无法在任何其他浏览器中复制。

如果我没有记错,某些浏览器在单击时会将以下任何HTML输入类型视为“提交”按钮

<input type="image" ... />
<input type="submit" ... />

我猜你的
实际上就生活在意外提交的表单中



如果我可以提出一个建议,那就是不要为表单按钮定义
click
处理程序,而是覆盖表单的
submit
处理程序,这样无论表单如何提交(例如,通过单击图像、单击submit或按enter键),您的代码总是会被调用。

如果我没记错的话,一些浏览器在单击时会将以下任何HTML输入类型视为“提交”按钮

<input type="image" ... />
<input type="submit" ... />

我猜你的
实际上就生活在意外提交的表单中



如果我可以提出一个建议,那就是不要为表单按钮定义
click
处理程序,而是覆盖表单的
submit
处理程序,这样无论表单如何提交(例如,通过单击图像、单击submit或按enter键),您的代码将始终被调用。

您可以改用提交按钮吗

<form id="print_work_order_form" method="post" action="<TMPL_VAR NAME=SCRIPT_NAME>" target="_blank">
<input type="hidden" name="action" value="printWorkOrder">
<input type="hidden" name="case_id" value="<TMPL_VAR NAME=ID>">
<input type="hidden" name="session_id" value="<TMPL_VAR NAME=SESSION_ID>">

<input id="print_work_order_button" type="submit" value="Print Work Order">

</form>

 $('#print_work_order_form').submit();

你能用提交按钮代替吗

<form id="print_work_order_form" method="post" action="<TMPL_VAR NAME=SCRIPT_NAME>" target="_blank">
<input type="hidden" name="action" value="printWorkOrder">
<input type="hidden" name="case_id" value="<TMPL_VAR NAME=ID>">
<input type="hidden" name="session_id" value="<TMPL_VAR NAME=SESSION_ID>">

<input id="print_work_order_button" type="submit" value="Print Work Order">

</form>

 $('#print_work_order_form').submit();

很难说没有看到更多的代码,但是如果您将绑定更改为
preventDefault()
,它应该可以工作:


很难说没有看到更多的代码,但是如果您将绑定更改为
preventDefault()
,它应该可以工作:



在本系列中,#case#u表单在哪里?您为按钮设置了哪些其他“单击”处理程序,以及如何设置它?可能有一个或多个附加的“单击”处理程序绑定到您的按钮。没有嵌套表单,每个按钮一次单击事件。。。好问题!好啊没有相互嵌套的表单,但有div标记干扰表单的解析。。。因此,Safari在解析一个结束标记时遇到了一个问题,该标记相对于打开标记在div之间嵌套不正确。现在的问题是:对于div之间奇怪的嵌套,您建议采用什么解决方案?我想让我的输入元素不必嵌套在它们所属的表单中……在这个场景中,#case#u表单在哪里?您为按钮设置了哪些其他“单击”处理程序,以及如何设置它?可能有一个或多个附加的“单击”处理程序绑定到您的按钮。没有嵌套表单,每个按钮一次单击事件。。。好问题!好啊没有相互嵌套的表单,但有div标记干扰表单的解析。。。因此,Safari在解析一个结束标记时遇到了一个问题,该标记相对于打开标记在div之间嵌套不正确。现在的问题是:对于div之间奇怪的嵌套,您建议采用什么解决方案?我想让我的输入元素不必嵌套在它们所属的表单中……只有前两个。Not type=“button”按钮不存在于任何窗体内。我真的只想在点击按钮时提交表单…只有前两个。Not type=“button”按钮不存在于任何窗体内。我真的只想在点击按钮时提交表单…这似乎不起作用。提醒我,我只是在Safari中看到这一点。这似乎不起作用。提醒我,我只在Safari中看到了这一点。我之所以使用“按钮”类型而不是“提交”类型,是因为按钮不在表单中。反正我把它改成了“提交”,但它不起作用。@Marcus-你能让它活在表单中吗?好主意。。。只是试过了。。。在狩猎旅行中仍有突破。什么是狩猎?“快把我逼疯了!”马库斯-它会出现任何错误或警告吗?你认为你可以制作一个有错误的表单,这样我们就可以看到了吗?我的最终解决方案是让步,让按钮活在表单中,成为实际的提交类型按钮。以前我不愿意这样做,因为表单总是导致换行,但现在我知道使用“display:inline;”表单的CSS样式。感谢所有帮助我走上正确方向的人。。。使用jqueryvalidate时要小心,它在表单提交时会做一些奇怪的事情,任何有智慧的人都可以自由地为这个问题添加更多的答案!我之所以使用“按钮”类型而不是“提交”类型,是因为按钮不在表单中。反正我把它改成了“提交”,但它不起作用。@Marcus-你能让它活在表单中吗?好主意。。。只是试过了。。。在狩猎旅行中仍有突破。什么是狩猎?“快把我逼疯了!”马库斯-它会出现任何错误或警告吗?你认为你可以制作一个有错误的表单,这样我们就可以看到了吗?我的最终解决方案是让步,让按钮活在表单中,成为实际的提交类型按钮。以前我不愿意这样做,因为表单总是导致换行,但现在我知道使用“display:inline;”表单的CSS样式。感谢所有帮助我走上正确方向的人。。。使用jqueryvalidate时要小心,它在表单提交时会做一些奇怪的事情,任何有智慧的人都可以自由地为这个问题添加更多的答案!
<form id="print_work_order_form" method="post" action="<TMPL_VAR NAME=SCRIPT_NAME>" target="_blank">
<input type="hidden" name="action" value="printWorkOrder">
<input type="hidden" name="case_id" value="<TMPL_VAR NAME=ID>">
<input type="hidden" name="session_id" value="<TMPL_VAR NAME=SESSION_ID>">

<input id="print_work_order_button" type="submit" value="Print Work Order">

</form>

 $('#print_work_order_form').submit();
$('#print_work_order_form').validate();
// bind print work order button to form submit
$('#print_work_order_button').click(function(e){
    e.preventDefault();
    $('#print_work_order_form').submit();
});