【问题标题】:making a input type "file" hidden with button使用按钮隐藏输入类型“文件”
【发布时间】:2015-05-28 20:30:13
【问题描述】:

我想知道这是否可行?谷歌一无所获。

基本上我希望我的按钮在被选中时进行模拟,允许用户上传文件。我已经用标签读过它的可能性,但我需要用一个按钮来做 UX/UI

<button style="position:fixed;bottom:10px;right:70px" type="button" class="btn btn-default">
    <input type="file" id="files" visbility="hidden" />
    <span class="glyphicon glyphicon-folder-open" aria-hidden="true"></span>
</button>

目前我的按钮如下所示: 对此:

【问题讨论】:

标签: jquery html css button input


【解决方案1】:

对我来说这是可行的:

<label htmlFor="inputGroupFile01">
     <span className="fa fa-file-image fa-lg"/>
</label>

【讨论】:

    【解决方案2】:

    由于所有其他答案都提到了隐藏 &lt;input&gt; 元素的各种方法,请考虑使用 opacity: 0 以及引用自 MDN docs

    注意:不透明度用于隐藏文件输入而不是可见性:隐藏或显示:无,因为辅助技术将后两种样式解释为意味着文件输入不是交互式的。

    您几乎可以通过任何其他事件触发文件输入(例如:按钮单击、悬停等),您可以在input 元素上调用click()(通过getElementById()querySelector() 获取它等)

    const inputElement = document.getElementById('file-input-element')
    
    // on some other event
    inputElement.click() // will let user select files
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 Angular 我想这是一个不错的解决方案

        <button class="" (click)="uploader.click()">
           <input hidden type="file" #uploader />
        <button>
      

      您可以轻松地与其他技术进行类比

      【讨论】:

        【解决方案4】:

        尝试不透明度为 0

        opacity:0;
        

        https://jsfiddle.net/m4e0y2o3/12/

        如果您要支持旧版浏览器,还可以添加备用

        .hiddenFileInput > input{
          height: 100%;
          width: 100;
          opacity: 0;
          cursor: pointer;
        }
        .hiddenFileInput{
          border: 1px solid #ccc;
          width: 100px;
          height: 100px;
          display: inline-block;
          overflow: hidden;
          cursor: pointer;
          
          /*for the background, optional*/
          background: center center no-repeat;
          background-size: 75% 75%;
          background-image:  url(data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjUxMnB4IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9Ii01MyAxIDUxMSA1MTEuOTk5MDYiIHdpZHRoPSI1MTJweCI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIGQ9Ik0gMjc2LjQxMDE1NiAzLjk1NzAzMSBDIDI3NC4wNjI1IDEuNDg0Mzc1IDI3MC44NDM3NSAwIDI2Ny41MDc4MTIgMCBMIDY3Ljc3NzM0NCAwIEMgMzAuOTIxODc1IDAgMC41IDMwLjMwMDc4MSAwLjUgNjcuMTUyMzQ0IEwgMC41IDQ0NC44NDM3NSBDIDAuNSA0ODEuNjk5MjE5IDMwLjkyMTg3NSA1MTIgNjcuNzc3MzQ0IDUxMiBMIDMzOC44NjMyODEgNTEyIEMgMzc1LjcxODc1IDUxMiA0MDYuMTQwNjI1IDQ4MS42OTkyMTkgNDA2LjE0MDYyNSA0NDQuODQzNzUgTCA0MDYuMTQwNjI1IDE0NC45NDE0MDYgQyA0MDYuMTQwNjI1IDE0MS43MjY1NjIgNDA0LjY1NjI1IDEzOC42MzY3MTkgNDAyLjU1NDY4OCAxMzYuMjg1MTU2IFogTSAyNzkuOTk2MDk0IDQzLjY1NjI1IEwgMzY0LjQ2NDg0NCAxMzIuMzI4MTI1IEwgMzA5LjU1NDY4OCAxMzIuMzI4MTI1IEMgMjkzLjIzMDQ2OSAxMzIuMzI4MTI1IDI3OS45OTYwOTQgMTE5LjIxODc1IDI3OS45OTYwOTQgMTAyLjg5NDUzMSBaIE0gMzM4Ljg2MzI4MSA0ODcuMjY1NjI1IEwgNjcuNzc3MzQ0IDQ4Ny4yNjU2MjUgQyA0NC42NTIzNDQgNDg3LjI2NTYyNSAyNS4yMzQzNzUgNDY4LjA5NzY1NiAyNS4yMzQzNzUgNDQ0Ljg0Mzc1IEwgMjUuMjM0Mzc1IDY3LjE1MjM0NCBDIDI1LjIzNDM3NSA0NC4wMjczNDQgNDQuNTI3MzQ0IDI0LjczNDM3NSA2Ny43NzczNDQgMjQuNzM0Mzc1IEwgMjU1LjI2MTcxOSAyNC43MzQzNzUgTCAyNTUuMjYxNzE5IDEwMi44OTQ1MzEgQyAyNTUuMjYxNzE5IDEzMi45NDUzMTIgMjc5LjUwMzkwNiAxNTcuMDYyNSAzMDkuNTU0Njg4IDE1Ny4wNjI1IEwgMzgxLjQwNjI1IDE1Ny4wNjI1IEwgMzgxLjQwNjI1IDQ0NC44NDM3NSBDIDM4MS40MDYyNSA0NjguMDk3NjU2IDM2Mi4xMTMyODEgNDg3LjI2NTYyNSAzMzguODYzMjgxIDQ4Ny4yNjU2MjUgWiBNIDMzOC44NjMyODEgNDg3LjI2NTYyNSAiIHN0eWxlPSIgZmlsbC1ydWxlOm5vbnplcm87ZmlsbC1vcGFjaXR5OjE7IiBzdHJva2U9IiMwMDAwMDAiIGZpbGw9IiMwMDAwMDAiLz4KPHBhdGggZD0iTSAzMDUuMTAxNTYyIDQwMS45MzM1OTQgTCAxMDEuNTM5MDYyIDQwMS45MzM1OTQgQyA5NC43MzgyODEgNDAxLjkzMzU5NCA4OS4xNzE4NzUgNDA3LjQ5NjA5NCA4OS4xNzE4NzUgNDE0LjMwMDc4MSBDIDg5LjE3MTg3NSA0MjEuMTAxNTYyIDk0LjczODI4MSA0MjYuNjY3OTY5IDEwMS41MzkwNjIgNDI2LjY2Nzk2OSBMIDMwNS4yMjY1NjIgNDI2LjY2Nzk2OSBDIDMxMi4wMjczNDQgNDI2LjY2Nzk2OSAzMTcuNTkzNzUgNDIxLjEwMTU2MiAzMTcuNTkzNzUgNDE0LjMwMDc4MSBDIDMxNy41OTM3NSA0MDcuNDk2MDk0IDMxMi4wMjczNDQgNDAxLjkzMzU5NCAzMDUuMTAxNTYyIDQwMS45MzM1OTQgWiBNIDMwNS4xMDE1NjIgNDAxLjkzMzU5NCAiIHN0eWxlPSIgZmlsbC1ydWxlOm5vbnplcm87ZmlsbC1vcGFjaXR5OjE7IiBzdHJva2U9IiMwMDAwMDAiIGZpbGw9IiMwMDAwMDAiLz4KPHBhdGggZD0iTSAxNDAgMjY4Ljg2MzI4MSBMIDE5MC45NTMxMjUgMjE0LjA3NDIxOSBMIDE5MC45NTMxMjUgMzQ5LjEyNSBDIDE5MC45NTMxMjUgMzU1LjkyNTc4MSAxOTYuNTE5NTMxIDM2MS40OTIxODggMjAzLjMyMDMxMiAzNjEuNDkyMTg4IEMgMjEwLjEyNSAzNjEuNDkyMTg4IDIxNS42ODc1IDM1NS45MjU3ODEgMjE1LjY4NzUgMzQ5LjEyNSBMIDIxNS42ODc1IDIxNC4wNzQyMTkgTCAyNjYuNjQwNjI1IDI2OC44NjMyODEgQyAyNjkuMTEzMjgxIDI3MS40NTcwMzEgMjcyLjMzMjAzMSAyNzIuODIwMzEyIDI3NS42Njc5NjkgMjcyLjgyMDMxMiBDIDI3OC42MzY3MTkgMjcyLjgyMDMxMiAyODEuNzMwNDY5IDI3MS43MDcwMzEgMjg0LjA3ODEyNSAyNjkuNDgwNDY5IEMgMjg5LjAyNzM0NCAyNjQuNzgxMjUgMjg5LjM5ODQzOCAyNTYuOTg4MjgxIDI4NC42OTkyMTkgMjUyLjA0Mjk2OSBMIDIxMi4yMjY1NjIgMTc0LjI1MzkwNiBDIDIwOS44NzUgMTcxLjc4MTI1IDIwNi42NjAxNTYgMTcwLjI5Njg3NSAyMDMuMTk5MjE5IDE3MC4yOTY4NzUgQyAxOTkuNzM0Mzc1IDE3MC4yOTY4NzUgMTk2LjUxOTUzMSAxNzEuNzgxMjUgMTk0LjE3MTg3NSAxNzQuMjUzOTA2IEwgMTIxLjY5OTIxOSAyNTIuMDQyOTY5IEMgMTE3IDI1Ni45ODgyODEgMTE3LjM3MTA5NCAyNjQuOTAyMzQ0IDEyMi4zMTY0MDYgMjY5LjQ4MDQ2OSBDIDEyNy41MTE3MTkgMjc0LjE3OTY4OCAxMzUuMzAwNzgxIDI3My44MDg1OTQgMTQwIDI2OC44NjMyODEgWiBNIDE0MCAyNjguODYzMjgxICIgc3R5bGU9IiBmaWxsLXJ1bGU6bm9uemVybztmaWxsLW9wYWNpdHk6MTsiIHN0cm9rZT0iIzAwMDAwMCIgZmlsbD0iIzAwMDAwMCIvPgo8L2c+Cjwvc3ZnPgo=)
        }
        <span class="hiddenFileInput">
          <input type="file" name="theFile"/>
        </span>

        【讨论】:

        • 为那个小提琴获得 404。
        • 悬停光标不会变成顶部的指针(我想需要添加一些偏移量
        • @victor-radu,请你解释一下你选择opacity: 0而不是display: none的原因。稍微推理一下(说明opacity: 0什么时候会更好)对以后的参考很有帮助。谢谢!
        • 你好,@BorisD.Teoharov display none 实际上并没有渲染 dom 中的元素,因此几乎不可能与之交互。 Opacity 0 渲染元素,但使其完全透明,这意味着即使您没有看到它,它仍会在您单击它时捕捉到单击交互。
        【解决方案5】:

        您可以使用以下方法通过按钮隐藏输入类型“文件”:

        <div>
             <input type="file" id="files" style="display:none"/>
             <button onclick="click_the_button(files);">Click me</button>
        </div>enter code here
        
        <script>
            function click_the_button(btn){
                btn.click();
            }
        </script>
        

        【讨论】:

          【解决方案6】:

          您实际上可以使用label 来做到这一点,您只需隐藏input

          <!-- head -->
          <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
          
          <!-- body -->
          <label for="upload">
                <span class="glyphicon glyphicon-folder-open" aria-hidden="true"></span>
                <input type="file" id="upload" style="display:none">
          </label>

          【讨论】:

          • 请注意,它不适用于旧的 Android 4.2 浏览器。
          • 标签标签中的“for”和输入标签中的“id”必须匹配。其余的只是用于造型。
          【解决方案7】:

          带有漂亮输入文件的简单方法 [type="file"]。

          输出图像 URL - https://i.stack.imgur.com/4Jl0H.jpg

          input[type="file"] {
          	display: inline-block;
          	opacity: 0;
          	position: absolute;
          	margin-left: 20px;
          	margin-right: 20px;
          	padding-top: 30px;
          	padding-bottom: 67px;
          	width: 85%;
          	z-index: 99;
          	margin-top: 10px;
          	cursor:pointer;
          }
          .custom-file-upload {
          	position:relative;
              display: inline-block;
              cursor: pointer;
          	padding-top:40px;
          	padding-bottom:40px;
          	background:url(http://www.a-yachtcharter.com/search-fleet/webaccess/assets/img/uploadIcon.png) #fff center center no-repeat;
          	width:91%;
          	border:1px dashed #ff5b57 !important;
          	margin-left:20px;
          	margin-right:20px;
          	margin-top:10px;
          	text-align:center;
          }
          <input type="file" multiple class="form-control">
          <label for="file-upload" class="custom-file-upload"></label>

          【讨论】:

            【解决方案8】:

            这样就可以了:

            <button id="fileup" style="position:fixed;bottom:10px;right:70px" type="button" class="btn btn-default" >
            <input type="file" id="files" visbility="hidden"/>
            <span class="glyphicon glyphicon-folder-open" aria-hidden="true"></span>
            </button>
            <script>
            $('#fileup').click(function() {
               $('#files').click();
            });
            </script>
            

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-01-08
            • 1970-01-01
            • 1970-01-01
            • 2020-05-05
            • 2017-09-21
            • 1970-01-01
            • 2011-09-20
            • 1970-01-01
            相关资源
            最近更新 更多