Javascript 双击时从对话框中选择文件时避免鼠标悬停事件
我在我的网页中有一个输入[type=file],当文件对话框打开,我通过双击选择一个文件时,会触发mouseup事件。但是,如果我选择文件,然后单击“打开”按钮进行选择,则没有额外的事件 这种行为是Firefox特有的,我在Chrome、IE和Opera中测试过,没有额外的鼠标点击事件。此外,没有mousedown事件,因此日志将有两个连续的mouseup事件 HTML: 是一把小提琴,你可以看到这种行为。要查看它的实际操作,请确保文件对话框位于JSFIDLE页面的结果框上方 我怎样才能避免这种情况?这是一个浏览器错误吗?谷歌搜索没有得到任何有用的结果Javascript 双击时从对话框中选择文件时避免鼠标悬停事件,javascript,jquery,html,firefox,mouseup,Javascript,Jquery,Html,Firefox,Mouseup,我在我的网页中有一个输入[type=file],当文件对话框打开,我通过双击选择一个文件时,会触发mouseup事件。但是,如果我选择文件,然后单击“打开”按钮进行选择,则没有额外的事件 这种行为是Firefox特有的,我在Chrome、IE和Opera中测试过,没有额外的鼠标点击事件。此外,没有mousedown事件,因此日志将有两个连续的mouseup事件 HTML: 是一把小提琴,你可以看到这种行为。要查看它的实际操作,请确保文件对话框位于JSFIDLE页面的结果框上方 我怎样才能避免这种
编辑:此问题出现在我的Firefox版本32.0.1(Win7 64位)上,但不出现在Linux的Firefox 32.0上 我已经尝试了你的代码。我认为没有标志值是很困难的,因为当双击文件时,在释放第二次单击之前,菜单将关闭,它将触发“MouseUp”事件。 我用flag值解决了这个问题。请看这个 HTML Java脚本
谢谢你当我进一步研究这一点时,我意识到这种行为会创建一个在mousedown事件之后不会触发的杂散mouseup事件 mouseup事件总是在mousedown事件之后,这一事实在所有现代浏览器中都是正确的。我发现唯一不正确的情况是IE 5-8中出现双击事件 因此,我使用的解决方案是设置一个标志,表示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;
});
也许你可以使用其中一个来表示它是对话框?我查看了e的属性,但没有看到一些有用的东西可以从双击中检测它,或者在文件对话框关闭后检测它。一个狡猾的修复方法可能是在显示对话框时解绑鼠标,在对话框关闭时重新绑定。不过,我不确定它是否有效。
jQuery(document).mouseup(function(e) {
//...
});
<input type="file" id='file1'/>
<div id="log"></div>
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 />');
});
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;
});