FireFox不要从jQuery脚本中取消表单提交

时间:2011-12-16 15:49:04

标签: javascript jquery firefox jqmodal

我有这种情况:

<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-info并且不得执行标准表单提交。为了我的 你可以想到的问题,因为我只是不希望提交表单 地方,所有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,然后在线打击// 2
  • FireFox - 在//第1行击中BP并且从不在第2行击中BP,所以 命令'return false'从未执行过:(

那么 - 如何使FF行为与所有其他浏览器相同?

P.S。第1行使用的库:

更新

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

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

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

1 个答案:

答案 0 :(得分:0)

试试这个:

jQuery('.reqSnip').submit(function(e) {
    jQuery('#snipDIV').jqmShow(); // 1
    e.preventDefault(); // 2
});