使用 jQuery、HTML 和 CSS 创建自定义文件上传

Jos*_*rra 2 html css php jquery

我正在设计的网站有这个小问题。已经结束了,但我认为 jQuery 是这里的问题。

代码如下:

<img src="files/register_page/upload_photo/body.png" id="upload">
<input type="file" name="file_upload" id="file_upload" style="visibility:hidden;">
Run Code Online (Sandbox Code Playgroud)

jQuery 如下,在文档的一部分:

$(document).ready( function(){
      $("#upload").click( function(){
          $('#file_upload').click();
      });
    });
Run Code Online (Sandbox Code Playgroud)

但是,单击 img 后,没有任何反应,应该弹出文件上传对话框。请,如果您需要更多信息或其他东西,请告诉我。如果没有,这里可能有什么问题?我正在使用 jQuery 1.8.0。

Fab*_*tté 5

使用 HTML5标签元素:

<label for="file_upload"><img src="files/register_page/upload_photo/body.png" id="upload"></label>
<input type="file" name="file_upload" id="file_upload" style="visibility:hidden;">
Run Code Online (Sandbox Code Playgroud)

小提琴

适用于 Chrome、IE 和 Opera,但不适用于 FF。

浏览器往往会限制您可以使用input type="file". label 元素将焦点重定向到 id 属性等于其for属性的输入,因此这是触发不可见元素的解决方法。


不过,现代浏览器在很大程度上减轻了这些限制,因此您可以.click()毫无问题地触发。

但是,您可以更改 CSS hack 以隐藏它而不使用旧浏览器display:nonevisibility:hidden与旧浏览器向后兼容。任何一个

position:absolute; top:-100px;
Run Code Online (Sandbox Code Playgroud)

或者

opacity:0;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
width:0; height:0;
Run Code Online (Sandbox Code Playgroud)

可以在不使用displayvisibilityCSS 属性的情况下隐藏元素。

小提琴


此外,这是 FF 上标签元素的解决方法,您可以更改visibility:hiddenbyopacity:0和:

$('#file_upload').focus(function() {
    $(this).click();
});
Run Code Online (Sandbox Code Playgroud)

小提琴。但如果主脚本工作正常,这应该是不必要的。