我有这样的情况:
<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 的帮助下,我绑定到提交此表单并自定义流程:
jQuery('.reqSnip').submit(function() {
jQuery('#snipDIV').jqmShow(); // 1
return false; // 2
});
为了使图片清晰:
- // 1 - 在网页上打开一些“弹出式”窗口
- // 2 - 取消表单提交。我这样做是因为表单只是请求一些 Ajax 信息,并且不能执行标准表单提交。对于我的问题,您可以认为因为我只是不希望提交表单,所以所有 Ajax 内容都与该问题无关。
所有这些如何协同工作:
- 在 IE7/8/9/Chrome/Opera - 一切如预期,弹窗打开,表单未提交
- 在 FireFox(Windows XP SP3 上的 8.0.1 版)中 - 弹出窗口打开并从 DO 提交(因此新标签出现在浏览器中)
我在 javascript 调试器中做了一个简单的调查(我只是在行 // 1 和 // 2 上放置了 2 个断点(BP))和我发现的事实:
- IE7/8/9/Chrome/Opera - 在线点击 BP // 1,然后在线点击 BP // 2
- FireFox - 在第 1 行命中 BP,从不在第 2 行命中 BP,因此命令“return false”从未执行过 :(
那么 - 如何使 FF 行为与所有其他浏览器中的行为相同?
第 1 行中使用的 PS 库:
- jQuery - 你知道的 :)
- jqmShow - 来自 jqModal 的命令,这是一个 jQuery 插件。它的主页:http ://dev.iceburg.net/jquery/jqModal
更新
我找到了问题的根源...根据 jqModal 文档(参见上面的链接),如果您绑定到 onShow 事件,您必须在事件处理程序内显示(设置可见)对话框(我的“弹出式”窗口) 。所以一般的方案是
var myOpen=function(hash){ hash.w.css('opacity',0.88).show(); };
$('#dialog').jqm({onShow:myOpen});
....
$('#dialog').jqmShow();
我写的代码非常接近这个。所有浏览器都接受这种方法。FF“不喜欢”它。不知道为什么。所以,要解决我的问题,不要绑定到 onShow 事件就足够了。那是!