调用输入的点击事件在Safari中不起作用

Sup*_*net 5 html javascript safari jquery

我有一个输入,文件类型,并带有display:none一个按钮。单击按钮后,应触发输入事件。在IE,Chrome和Firefox中,它可以工作,但在Safari中不起作用!

var elem=$('<input id="ajxAttachFiles" name="fileUpload" type="file" style="display: none;"/>');
    if($("#ajxAttachFiles").length==0){
        elem.prependTo(".ChProgress");
    }
$("#ajxAttachFiles").click();
Run Code Online (Sandbox Code Playgroud)

控制台中没有错误。我尝试了这个,但是什么也没有。

var elem=$('<input id="ajxAttachFiles" name="fileUpload" type="file" style="display: none;"/>');
    if($("#ajxAttachFiles").length==0){
        elem.prependTo(".ChProgress");
    }
$("#ajxAttachFiles").click();
Run Code Online (Sandbox Code Playgroud)
$(document).ready(function(){
        $("#btn").on('click',function(){
          $("#ajxAttachFiles")[0].click();
        });
});
Run Code Online (Sandbox Code Playgroud)

Sup*_*net 4

问题彻底解决了。要点是 的元素input[type=file]一定不能是display: none。看下面的示例:

function click(el) {
  // Simulate click on the element.
  var evt = document.createEvent('Event');
  evt.initEvent('click', true, true);
  el.dispatchEvent(evt);
}

document.querySelector('#selectFile').addEventListener('click', function(e) {
  var fileInput = document.querySelector('#inputFile');
  //click(fileInput); // Simulate the click with a custom event.
  fileInput.click(); // Or, use the native click() of the file input.
}, false);
Run Code Online (Sandbox Code Playgroud)
<input id="inputFile" type="file" name="file" style="visibility:hidden; width:0; height:0">
<button id="selectFile">Select</button>
Run Code Online (Sandbox Code Playgroud)

  • 可见性并不是它起作用的原因,而是它是从单击事件调用的事实。 (2认同)