文件输入javascript点击不是由真正的鼠标点击生成的

文件输入javascript点击不是由真正的鼠标点击生成的,javascript,jquery,html,google-chrome,Javascript,Jquery,Html,Google Chrome,我在打开文件输入类型的文件上传弹出窗口时遇到问题 正如您在这里看到的:,单击元素可以触发对文件输入的单击,但例如,将元素悬停不会触发对输入的单击 $('#test').on('click', function(){ $('#upload').trigger('click'); }); $('#test').on('mouseenter', function(){ $('#upload').trigger('click'); }); 在现实生活中,我遇到了这个问题,因为在一个web应

我在打开文件输入类型的文件上传弹出窗口时遇到问题

正如您在这里看到的:,单击元素可以触发对文件输入的单击,但例如,将元素悬停不会触发对输入的单击

$('#test').on('click', function(){
   $('#upload').trigger('click');
});
$('#test').on('mouseenter', function(){
   $('#upload').trigger('click');
});
在现实生活中,我遇到了这个问题,因为在一个web应用程序中,我正在加载一个输入文件中包含的内容。 加载结束时,弹出文件必须打开,但无法在Chrome上运行(workign on FF)

我想问题是,这个动作不是由鼠标点击(悬停、超时等)生成的,所以chrome不会触发文件上传

我也尝试过这个:所以点击这个元素,等待然后触发点击但什么都没有,因为在点击和触发器的中间有“StimeTimeUT”:(

) 如果您删除延迟:它会工作
有什么想法来完成这项工作吗?

如果我没记错的话,mouseenter和mouseleave是IE特有的,不是标准事件。也许它们被扩展了,但不认为它们成为了标准。因此,事件本身可能会给您带来一些问题

要解决这个问题,您可以使用一个lib(例如jQuery),它处理浏览器之间的差异(或者您可以检查那里的代码并获取所需的内容)


第二种方法…尝试鼠标覆盖…它工作得更好(同样…有一段时间没有与它们一起工作,所以事情可能发生了,但我记得它们是这样的)。

由于安全原因,无法触发
输入文件类型的单击事件

您可以尝试通过将
按钮/div
位置设置为
绝对
顶部
设置为
-100px
这意味着通过设置“上面的样式”将其定位在视口之外,以使其正常工作

但是对于
mouseenter
mouseover
我认为它不会起作用

编辑:

将输入移到视口和目标单击事件之外

旁注:现在
单击
在您编写时发生两次

$('#upload').trigger('click').click();
你只需要

$('#upload').trigger('click');  //  $('#upload').click() 

除非你想让它多次启动。

鼠标输入的语法正确吗?它不应该在mouseenter上吗?@user3036342
on()
是一种方法,因此
mouseenter
是正确的
/8
fiddle可以工作,因为您只是重定向用户自己的操作。与打开新窗口相同,浏览器只允许在某些事件期间以及其中一个事件仍处于活动状态时触发文件选择。
setTimeout()
/7
中的
允许事件首先过期,而
/3
中的
'mouseenter'
没有意义导致
'click'
。我改进了我的问题,问题是,如何保持click事件的活动状态并将其传递到输入?@dt并且在处理程序中仅使用同步代码(如果它们不活动的话)挂起事件的状态。在计时器或任何其他异步操作完成之前,您不能强制它保持活动状态。一旦它冒泡/传播(如果它将要进行),并且调用并退出最后一个绑定处理程序,事件就完成了。有一种方法,因为它是有效的:而这一种是无效的:。(单击红方块)因此,我不知道将输入隐藏在vieport之外对我有什么帮助:(@dt和Look我已经更新了我的答案,这就是你想要的吗?不@Dhaval Marthak,如果我没有正确解释,很抱歉。如果你点击方框输入(隐藏或不隐藏)如果单击和触发器之间有延迟,则不会打开。如果删除延迟:它会工作。@dt如果将延迟设置为
1000
,它有时会工作,但有时会丢失它!我不知道为什么会发生这种情况,但奇怪!看!是的,我看到了,我想是因为该事件如@Jonathan Lonowski所说的那样过期了。我猜是这样的没有办法解决它:(这不是问题所在,因为在这里:我使用的是just click,不管怎样,检测到鼠标指针(查看日志),它只是无法打开弹出窗口。
$('#upload').trigger('click');  //  $('#upload').click()