双击时从对话框中选择文件时,避免出现mouseup事件
Avoid mouseup event when selecting a file from dialog when double clicking
我的网页中有一个input[type="file"]
,当打开文件对话框并双击选择一个文件时,会触发mouseup
事件。但是,如果我选择文件,然后单击打开按钮进行选择,则没有额外的事件。
这种行为是Firefox特有的,我在Chrome、IE和Opera中测试过,没有额外的mouseup
事件。此外,没有mousedown
事件,因此日志将有两个连续的mouseup
事件。
HTML:
<input type="file" />
JavaScript:
jQuery(document).mouseup(function(e) {
//...
});
这是一把小提琴,你可以在那里看到这种行为。要在操作中查看它,请确保文件对话框位于jsfiddle页面的Result框上方。
我该如何避免这种情况?这是浏览器错误吗?谷歌搜索没有得到任何有用的结果。
编辑:这个问题出现在我的Firefox(Win7 64位上的32.0.1版本)上,但在Linux中的Firefox 32.0上没有。
当我对此进行深入研究时,我意识到这种行为会创建一个在mousedown
事件之后不会触发的杂散mouseup
事件。
mouseup
事件总是在mousedown
事件之后,这一事实在所有现代浏览器中都是正确的。我发现唯一不正确的情况是IE 5-8(Source)中存在double-click
事件。
因此,我使用的解决方案是设置一个标志,即mousedown
事件发生,并且mouseup
事件将发生,该标志应设置为true。
例如:
var mousedown = false;
jQuery(document).mousedown(function (e) {
mousedown = true;
});
jQuery(document).mouseup(function (e) {
if (!mousedown) { // Stray mouseup event detected, handle it with
/*
e.preventDefault();
e.stopPropagation();
*/
}
mousedown = false;
});
我已经尝试了您的代码。我认为没有标志值是很困难的,因为当双击文件时,在释放第二次点击之前,菜单将关闭,它将触发"鼠标向上"事件。我已经通过使用标志值解决了这个问题。请查看此小提琴。
HTML
<input type="file" id='file1'/>
<div id="log"></div>
Java脚本
var flag;
$(document).mouseup(function(e) {
if(e.target.id != 'file1' && flag==1){
flag = 0;
}
else if(e.target.id == 'file1'){
flag = 1;
$('#log').prepend('mouseup: ' + (new Date()).toString() + '<br/>');
}
else{
flag = 0;
$('#log').prepend('mouseup: ' + (new Date()).toString() + '<br/>');
}
});
$(document).mousedown(function(e) {
$('#log').prepend('mousedown: ' + (new Date()).toString() + '<br />');
});
感谢
- 在拖动过程中释放鼠标时忽略 JavaScript mouseUp 事件
- ExtJS 4按钮上的mousedown/mouseup事件
- mouseup事件后禁用jQuery contextMenu
- mouseup事件停止firefox上的click事件
- 是mousedown事件固有地比mouseup事件慢
- 谷歌地图矩形mouseDown和mouseUp事件无法在边界触发
- 使用jquery在body mouseup事件后停止传播
- 双击时从对话框中选择文件时,避免出现mouseup事件
- jQuery:如何将函数绑定到mouseup事件之后立即发生的某个事件
- 触发旋转的MouseUp事件
- Mouseup事件与可见性开关冲突
- 悬停在iframe上后不会触发文档上的Mouseup事件
- JavaScript mouseup事件被触发多次在一次点击
- 在IE和Safari中滚动条移动后不会触发mouseup事件
- 使用mouseup事件选择文本,使用调用函数选择dbclick事件
- 如何在jquery范围滑块中使用mouseup事件
- mouseup事件有问题
- 为什么jquery mouseup事件不工作在谷歌浏览器
- I'我试图在mousedown之后强制mouseup事件
- 检查是否同时触发了mousedown和mouseup事件