Jquery触发器点击不适用于mac,Ipad和Iphone中的safari浏览器

我试图在单击另一个按钮时触发输入类型=“文件”上的单击事件。

演示: http : //jsfiddle.net/Y85g6/

它在所有浏览器中都运行良好,除了在mac,Ipad和Iphone中的safari浏览器。

有什么技巧可以完成这项任务吗?

您可以使用以下代码在所有浏览器中成功运行,而不是trigger("click")

 var evt = document.createEvent("HTMLEvents"); evt.initEvent("click", true, true); document.getElementById(elem_id).dispatchEvent(evt); 

找到了替代方案。

只需通过绝对定位将输入type="file"放在自定义按钮上,然后使用jQuery fadeTo('fast',0)隐藏它。

现在如果我们点击自定义按钮文件,则会出现浏览器窗口。

它适用于所有桌面浏览器,但不适用于iPhoneiPad因为它们不允许上传任何文件。

使元素可见,因为触发器事件对mac safari中的隐藏元素不起作用。

出于安全原因,浏览器在与文件输入的JavaScript交互方面可能非常挑剔。 Safari阻止您触发任何点击事件。 某些版本的Chrome和Firefox也有此限制。 这已在此前讨论过 。

最好使用CSS代替JS来隐藏元素,因为它会直接隐藏元素。

以下方法为我做了诀窍:

 $(".upload_on_click").each(function(index) { var form = $(this).next("form"); //form.hide(); /* THIS TECHNIQUE DIDN'T WORK IN SAFARI */ form.css("position", "absolute"); form.css("visibility", "hidden"); $(this).css("cursor", "pointer"); $(this).click(function() { $('input[type="file"]', form).trigger("click"); }); $('input[type="file"]', form).change(function() { $('input[type="submit"]', form).trigger("click"); }); }); 

不确定是否有人正在阅读这个问题,但我最近有一个与Safari类似的问题,所以我想我会分享。

首先,正如ceejayoz所提到的,请参阅此处的讨论: 在JavaScript中,我可以通过编程方式为文件输入元素创建“click”事件吗?

然后,如果您不想使用按钮定位,则解决方案是显示文件输入按钮(删除“display:none;”),然后使用“opacity:0;”隐藏它。 您可能还希望绝对定位它,以便它不与其他元素交互。 无论如何,这样你仍然可以使用JS来激活所有浏览器中的文件输入。

Safari中不支持.click()。 Sattu的建议应该有效。 但是您不需要Javascript来自定义输入文件按钮。

  

参考: http : //noypiscripter.blogspot.com/2014/04/simplest-cross-browser-custom-upload.html

我得到了最简单的答案

opacity : 0.01输入文件元素为opacity : 0.01

只需删除“display:none”并使用“visibility:hidden”并跨浏览器工作。

尝试在页脚中加载脚本。 我有几次类似的问题,这就是诀窍。