我在chrome打开文件输入类型的文件上传弹出窗口时遇到了麻烦。
正如您在此处所见:http://jsfiddle.net/cavax/K99gg/3/,单击元素可触发文件输入的单击,但例如,悬停元素不会触发输入的单击。
$('#test').on('click', function(){
$('#upload').trigger('click');
});
$('#test').on('mouseenter', function(){
$('#upload').trigger('click');
});
在现实生活中,我遇到了这个麻烦,因为在一个网络应用程序中,我正在加载一个内容输入文件中的ajax内容。 在加载结束时,弹出文件必须打开,但无法在Chrome上运行(在FF上工作)。
我猜的问题是鼠标单击(悬停,超时等)不会产生动作,因此chrome不会触发文件上传。
我也试过这个:http://jsfiddle.net/cavax/K99gg/7/,所以点击元素,等待然后触发点击但没有,因为点击中间有一个“settimeout”和触发器:(
$('#test').on('click', function(){
setTimeout(function(){
$('#upload').trigger('click');
}, 3000);
});
如果您删除了延迟:http://jsfiddle.net/cavax/K99gg/8/它可以正常工作 有任何想法让这项工作?
答案 0 :(得分:0)
如果我没记错的话,mouseenter和mouseleave特定于IE,而不是标准事件。也许他们被延长了,但不认为他们成了标准。所以事件本身可能会给你带来一些问题。
要解决此问题,您可以使用lib(例如jQuery)来处理浏览器差异(或者您可以检查代码并获取所需内容)。
第二种方式......尝试鼠标悬停......它效果更好(再次......暂时不能与它们一起使用,所以事情可能已经发生了,但这就是我记得它们的方式)。
答案 1 :(得分:0)
由于安全原因,无法触发input file type
的点击事件。
您可以通过将button/div
位置设为absolute
和top
至-100px
来尝试解决此问题
这意味着通过设置上面的样式将其定位在视口外部使其工作。
但对于mouseenter
和mouseover
,我觉得它不会起作用!
修改强>
在视口和目标点击事件之外移动输入
旁注:现在click
出现了2次,因为你写了
$('#upload').trigger('click').click();
你只需要
$('#upload').trigger('click'); // $('#upload').click()
除非你想让它发射超过一次。