0

我有一个模态框覆盖,用户可以在其中编辑一些信息。关闭此覆盖的一种方法是简单地按 ESC。我对这个工作没有问题。但是,在此模式框中是用于上传文件的部分。当用户选择一个文件时,如果用户按下 ESC,它会关闭“选择文件”对话框,但是我的“模态框关闭”脚本也会检测到该按键。我确实有一个确认对话框来询问用户是否确定要关闭该框,但是如果他们只是尝试关闭“文件选择”对话框,我仍然不希望触发该操作。

这里最好的方法是什么?有没有办法确定浏览器的焦点是在“文件选择”对话框还是实际页面的一部分上?

更新: 前三个答案基本相同,而且解决方案非常简单,我什至都不好意思问了。谢谢您的帮助。通常我会接受答案,但由于三个相同,我不确定如何选择最喜欢的。我想我只会选一个。不过,这并没有使其他两个变得不那么可接受。谢谢大家。

4

3 回答 3

1

当对话框打开时设置一个标志变量为真。当对话框关闭时将其更改为假。如果它为假,则应用按键逻辑。

于 2013-04-09T06:30:46.420 回答
1

这里最好的方法是什么?有没有办法确定浏览器的焦点是在“文件选择”对话框还是实际页面的一部分上?

为什么让它变得如此复杂,您可以识别用户是否单击了“选择文件”按钮,因此您可以设置一个标志变量并将其设置为 true,只要他们单击此按钮。

然后您的 keydown/keyup 事件可以检查标志并相应地处理场景。

编辑:

示例代码:

var SelectFileCode = {
   IsSelectingFile: false,

   Click: function() {
      this.IsSelectingFile = true;
      //do stuff here to open dialog
   },
   KeyDown: function(event) {
     if (this.IsSelectingFile && event.which == 27) //pressed ESC
        //don't close modal, just close select dialog
   }
};

$(function() {
    $('.selectBtn').click(SelectFileCode.Click);
    $('.modal').keydown(SelectFileCode.KeyDown);
});

您需要确保正确重置IsSelectingFile,但这将是一般方法。

于 2013-04-09T06:31:04.990 回答
1

当按下浏览文件按钮时,您可以设置一个变量(一个标志)。稍后在您关闭模式框的地方,只需检查标志,如果它打开,请不要关闭框。

于 2013-04-09T06:31:27.067 回答