jQuery触发文件输入

IT技术 javascript jquery css
2021-01-16 04:18:04

我正在尝试使用 jQuery 触发上传框(浏览按钮)。
我现在试过的方法是:

$('#fileinput').trigger('click');   

但它似乎不起作用。请帮忙。谢谢你。

6个回答

这是由于安全限制。

我发现安全限制仅当<input type="file"/>设置为display:none;或 时visbilty:hidden

所以我尝试通过设置将它定位在视口之外position:absolutetop:-100px;然后它就可以工作了。

http://jsfiddle.net/DSARd/1/

称之为黑客。

希望这对你有用。

您也可以将不透明度设置为 0
2021-03-13 04:18:04
+1 这是真正的答案(&一个很好的解决方案)。有没有人有明确说明的文档链接?
2021-03-23 04:18:04
msdn 上是否有关于安全限制的文档?
2021-03-29 04:18:04
效果很好。无论如何,我认为设置一个left: -100px;. 你永远不知道一页能有多长
2021-04-03 04:18:04
在 ff 3.6 中不起作用。可以在 chrome 中使用,甚至可以在 ie 8 中使用 :)
2021-04-08 04:18:04

这对我有用:

JS:

$('#fileinput').trigger('click'); 

HTML:

<div class="hiddenfile">
  <input name="upload" type="file" id="fileinput"/>
</div>

CSS:

.hiddenfile {
 width: 0px;
 height: 0px;
 overflow: hidden;
}

>>>另一个跨浏览器:<<<

想法是在自定义按钮上覆盖一个不可见的巨大“浏览”按钮。因此,当用户单击您的自定义按钮时,他实际上是在单击本机输入字段的“浏览”按钮。

JS小提琴:http : //jsfiddle.net/5Rh7b/

HTML:

<div id="mybutton">
  <input type="file" id="myfile" name="upload"/>
  Click Me!
</div>

CSS:

div#mybutton {

  /* IMPORTANT STUFF */
  overflow: hidden;
  position: relative;   

  /* SOME STYLING */
  width:  50px;
  height: 28px;
  border: 1px solid green;
  font-weight: bold
  background: red;
}

div#mybutton:hover {
  background: green;
}

input#myfile {
  height: 30px;
  cursor: pointer;
  position: absolute;
  top: 0px;
  right: 0px;
  font-size: 100px;
  z-index: 2;

  opacity: 0.0; /* Standard: FF gt 1.5, Opera, Safari */
  filter: alpha(opacity=0); /* IE lt 8 */
  -ms-filter: "alpha(opacity=0)"; /* IE 8 */
  -khtml-opacity: 0.0; /* Safari 1.x */
  -moz-opacity: 0.0; /* FF lt 1.5, Netscape */
}

JavaScript:

$(document).ready(function() {
    $('#myfile').change(function(evt) {
        alert($(this).val());
    });
});
第二个甚至适用于 iOS 上的 Safari。非常好!
2021-03-25 04:18:04
有一个缺陷,如果您将按钮设置得更宽,那么在 IE9/10 中,不可见的上传按钮由右侧按钮和左侧文本字段组成。在此您必须双击。在这种情况下,尝试将 font-size 设置为大于 100px;
2021-04-01 04:18:04
这甚至适用于 Chrome 53。但是,height建议更改为height: 100%
2021-04-06 04:18:04

您可以使用 LABEL 元素 ex。

<div>
    <label for="browse">Click Me</label>
    <input type="file" id="browse" name="browse" style="display: none">//
</div>

这将触发输入文件

我刚刚进行了编辑,没有注意到我没有登录,现在我无法编辑它。简而言之,出于可访问性的原因,标签标签应包括 tabindex="1"(无论它应该是什么 Tab 键顺序索引)和 role="button" 属性)
2021-03-11 04:18:04
对于我使用的输入: opacity: 0; height: 0; width: 0; margin: 0; display: inline;
2021-03-27 04:18:04
不幸的是,这在 iOS 上的 Safari 中不起作用:(
2021-04-06 04:18:04

我让它在 IE8+、最近的 FF 和 chrome 中工作(=测试):

$('#uploadInput').focus().trigger('click');

关键是在点击之前聚焦(否则 chrome 会忽略它)。

注意:您确实需要显示和可见您的输入(例如, notdisplay:none和 not visibility:hidden)。我建议(和其他许多人一样)绝对定位输入并将其扔出屏幕。

#uploadInput {
    position: absolute;
    left: -9999px;
}
+1。我还注意到您可以隐藏周围的元素,但不能隐藏文件输入按钮,然后显示周围的元素,聚焦按钮,激活它,然后隐藏按钮。
2021-03-26 04:18:04

看看我的小提琴。

http://jsfiddle.net/mohany2712/vaw8k/

.uploadFile {
  visibility: hidden;
}

#uploadIcon {
  cursor: pointer;
}
<body>
  <div class="uploadBox">
    <label for="uploadFile" id="uploadIcon">
      <img src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/34/Icon_-_upload_photo_2.svg/512px-Icon_-_upload_photo_2.svg.png"  width="20px" height="20px"/>
    </label>
    <input type="file" value="upload" id="uploadFile" class="uploadFile" />
  </div>
</body>