我有这种情况:
<form class="reqSnip" action="snipvw" method="post" target="_blank">
<input type="hidden" name="a_snip" value="0">
<input type="hidden" name="b_snip" value="1">
<input type="hidden" name="fullDoc" value="true">
<button type="submit" class="getFullSnippet"></button>
</form>
所以 - 具有 3 个隐藏字段和提交按钮的基本表单。在 jQuery 的帮助下,我绑定(bind)到提交此表单的时刻并自定义流程:
jQuery('.reqSnip').submit(function() {
jQuery('#snipDIV').jqmShow(); // 1
return false; // 2
});
为了让图片清晰:
- //1 - 在网页上打开一些“弹出式”窗口
- //2 - 取消表单提交。我这样做是因为表格只要求一些 Ajax-info 并且不得执行标准表单提交。对于我的 您可以考虑的问题,因为我只是不想提交表单 地方,所有 Ajax 的东西都与问题无关。
所有这些如何协同工作:
- 在 IE7/8/9/Chrome/Opera 中 - 一切如预期,弹出窗口打开,表单未打开 提交
- 在 FireFox 中(Windows XP SP3 上的版本 8.0.1)- 弹出窗口打开并从 DO 已提交(因此新标 checkout 现在浏览器中)
我对 javascript 调试器进行了简单的调查(我只是在行//1 和//2 上放置了 2 个断点 (BP))和我发现的事实:
- IE7/8/9/Chrome/Opera - 在//1 行点击 BP,然后在//2 行点击 BP
- FireFox - 在行//1 上点击 BP 而从不在行//2 上点击 BP,所以 命令“return false”从未执行过:(
那么 - 如何使 FF 行为与所有其他浏览器中的行为相同?
附言第 1 行中使用的库:
- jQuery - 你知道 :)
- jqmShow - 来自 jqModal 的命令,这是一个 jQuery 插件。它是 首页:http://dev.iceburg.net/jquery/jqModal
更新
我找到了问题的根源... 根据 jqModal 文档(参见上面的链接),如果您绑定(bind)到 onShow 事件,则必须在事件处理程序内部显示(设置可见)对话框(我的“类似弹出窗口”的窗口)。所以一般方案会是
var myOpen=function(hash){ hash.w.css('opacity',0.88).show(); };
$('#dialog').jqm({onShow:myOpen});
....
$('#dialog').jqmShow();
我编写的代码非常接近于此。 所有浏览器都接受这种方法。 FF“不喜欢”它。不知道为什么。所以,为了解决我的问题,不要绑定(bind)到 onShow 事件就足够了。那就是!
最佳答案
试试这个:
jQuery('.reqSnip').submit(function(e) {
jQuery('#snipDIV').jqmShow(); // 1
e.preventDefault(); // 2
});
关于javascript - FireFox 不要取消从 jQuery 脚本提交的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8536597/