【发布时间】:2015-09-11 00:18:39
【问题描述】:
我的 HTML 中有一个 <input type="file" id="browse-button"/> 文件浏览器输入。
我还有另一个 ID 为 choose-file-button 的按钮,单击该按钮时会调用 document.getElementById("browse-button").click();。单击此按钮时,它会正确单击#browse-button 并打开文件对话框。
现在,我从this answer 获取代码来拦截Ctrl+O 按键并打开我的文件对话框,所以我有这个:
$(window).bind('keydown', function(e)
{
if (e.ctrlKey || e.metaKey)
{
switch (String.fromCharCode(e.which).toLowerCase())
{
case 's':
e.preventDefault();
// doesn't matter for this question
return false;
case 'o':
e.preventDefault();
document.getElementById("choose-file-button").click();
return false;
}
}
return true;
});
如您所见,当我拦截 Ctrl+O 时,我单击了 #choose-file-button 按钮,该按钮在其 onclick 处理程序中调用 document.getElementById("browse-button");。我在这个点击处理程序中放了一个断点,当我按下Ctrl+O 时,它确实到达了这个断点。但是,文件对话框永远不会出现。
通过调试,我发现如果我在#choose-file-button click() 行后面加上一个alert(...);,那么警报就会出现并且会出现正常的页面“打开文件”对话框(不是我的文件对话框)。但是,如果我没有此警报,则根本不会显示任何内容。
这是一个错误吗?如何修复它并通过截获的Ctrl+O 显示我的文件对话框?
编辑:我刚刚在 Chrome 中进行了测试,它运行良好。但是,它仍然无法在 Firefox 中运行。
【问题讨论】:
-
您是否尝试过使用 JQuery 通过
$("#choose-file-button").click()而不是使用 getElementById 来触发您的点击? -
@Osuwariboy 我现在有了,但它并没有改变任何东西。
-
您的问题似乎与此类似:override ctrl+s。也许你可以试试他们的一些建议?
-
@Osuwariboy 当然可以,但我根本不想要任何警报,即使是延迟警报。
-
你的大写锁定了吗?
标签: javascript jquery html dialog