按键“ enter”上的Bootstrap modal仅在Firefox上执行回发

时间:2019-04-26 14:46:41

标签: jquery model-view-controller bootstrap-modal

我在MVC中有一个局部视图,该局部视图在页面上显示为引导模式,并且该页面还具有POST操作。当前,当页面上显示一个弹出窗口时,至少不允许使用chrome的用户按Enter键,该键不会执行任何操作。但是,如果我使用的是Firefox,则在模式对话框中按Enter键会在父页面上进行回发,并将其带到下一页。我确实在父页面上处理了keypress事件,因此它禁用了在chrome上可以正常运行的enter关键字,但在Firefox上却无法正常工作。

$(document).keypress(
            function (event) {
                if (event.which === '13') {
                    event.preventDefault();
                }
            });

我在做什么错?在firefox中,避免或不执行此脚本有什么用?让我知道是否需要提供其他信息。

1 个答案:

答案 0 :(得分:0)

所以我能够弄清楚这一点。我的情况是我在MVC中有一个表单,在该表单中有此模式弹出窗口,当单击页面上的按钮时将显示该模式。包含弹出窗口的页面具有POST操作,因此在弹出窗口中按Enter键时,将触发发布操作。在Page.cshtml上,当弹出窗口打开时,我禁用了表单提交。

var shouldPrevent = false;
        $(function () {
            $("form").submit(function (e) {
                if (shouldPrevent)
                    e.preventDefault();
            })
            $('#modalpopup').on('hidden.bs.modal', function (e) {
                shouldPrevent = false;
            })
        });
$('.btnToShowPopup').click(function (e) {
  e.preventDefault();
  shouldPrevent = true;
 });
        

这样做,只要单击按钮以显示模式,就将禁用表单提交。当模式关闭时,启用提交按钮。利用了bootstrap 3模态事件处理程序的优势。这解决了我的问题,即使在模式上也可以通过Enter关键字击中页面发布动作。

谢谢!