我看过几篇类似的帖子,其中的解决方案似乎对这些人有用,但我无法让它发挥作用。
我在用http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/ http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/在我的项目中。它在所有浏览器中都能完美运行,除了 Safari 中的“浏览”按钮不会打开文件对话框。 script.js 中存在以下代码(包含该代码是为了让插件正常工作):
$('#drop a').click(function(){
// Simulate a click on the file input button
// to show the file browser dialog
$(this).parent().find('input').click();
});
.click() 在 Safari 中不会触发。我已经尝试过解决方案jQuery .click() 适用于除 Safari 之外的所有浏览器 https://stackoverflow.com/questions/12925153/jquery-click-works-on-every-browser-but-safari并实施了
$('#drop a').click(function(){
var a = $(this).parent().find('input');
var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent('click', true, true, window);
a.dispatchEvent(evObj);
});
但后来我得到了错误dispatchEvent is not a function
。然后我对此做了一些研究,并尝试了 jQuery.noConflict() 路线,但这并没有解决错误。另外,我在主文件中使用了大量 jQuery,并且无法为整个页面激活 noConflict() 模式。 jQuery 也没有理由与任何东西发生冲突,因为我只使用 jQuery 和普通的 javascript,并且没有使用原型或 Angular 之类的东西。有人知道在 Safari 中模拟点击的另一种方法吗?
UPDATE:仅供参考,我添加了一个alert('test')
在提到的函数(单击“浏览”时触发)中,我确实在 Safari 中收到警报,但它没有模拟文件输入元素的单击,即:它没有打开文件对话框。