2

我有这样的情况:

<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 库:

更新

我找到了问题的根源...根据 jqModal 文档(参见上面的链接),如果您绑定到 onShow 事件,您必须在事件处理程序显示(设置可见)对话框(我的“弹出式”窗口) 。所以一般的方案是

var myOpen=function(hash){ hash.w.css('opacity',0.88).show(); }; 
$('#dialog').jqm({onShow:myOpen}); 
....
$('#dialog').jqmShow();

我写的代码非常接近这个。所有浏览器都接受这种方法。FF“不喜欢”它。不知道为什么。所以,要解决我的问题,不要绑定到 onShow 事件就足够了。那是!

4

1 回答 1

0

尝试这个:

jQuery('.reqSnip').submit(function(e) {
    jQuery('#snipDIV').jqmShow(); // 1
    e.preventDefault(); // 2
});
于 2011-12-16T15:53:20.460 回答