Javascript / Jquery - 检测按键,除非显示文件选择对话框

时间:2013-04-09 06:28:21

标签: javascript jquery dialog

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

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

更新 前三个答案基本相同,解决方案很简单,我甚至很尴尬,我甚至问过。谢谢您的帮助。通常我会接受一个答案,但由于三者是相同的,我不确定如何选择一个喜欢的。我猜我会选一个。但这并不能使其他两个不太可接受。谢谢大家。

3 个答案:

答案 0 :(得分:1)

在对话框打开时将标志变量设置为true。当对话框关闭时将其更改为false。如果为false,则应用keypress逻辑。

答案 1 :(得分: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,但这是一般方法。

答案 2 :(得分:1)

按下“浏览文件”按钮时,可以设置变量(标志)。稍后关闭模态框时,只需检查标志,如果它已打开,请不要关闭该框。