我有一个模态框叠加,用户可以编辑一些信息。关闭此叠加层的方法之一就是按ESC键。我对这项工作没有任何问题。但是,在此模式框中是用于上载文件的部分。当用户选择文件时,如果用户按下ESC,它会关闭“选择文件”对话框,但是我的“模态框关闭”脚本也会检测到该按键。我确实有一个确认对话框询问用户他们是否确定要关闭该框,但如果他们只是尝试关闭“文件选择”对话框,我仍然不希望触发该操作。
这里最好的方法是什么?有没有办法确定浏览器的焦点是在“文件选择”对话框上还是实际页面的一部分?
更新 前三个答案基本相同,解决方案很简单,我甚至很尴尬,我甚至问过。谢谢您的帮助。通常我会接受一个答案,但由于三者是相同的,我不确定如何选择一个喜欢的。我猜我会选一个。但这并不能使其他两个不太可接受。谢谢大家。
答案 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)
按下“浏览文件”按钮时,可以设置变量(标志)。稍后关闭模态框时,只需检查标志,如果它已打开,请不要关闭该框。