input type = file show only button


154

<input type=file />テキストフィールドなしで「参照」ボタンのみを表示するように要素(またはスクリプト)のスタイルを設定する方法はありますか?

ありがとう

編集:なぜこれが必要なのかを明確にするためです。http://www.morningz.com/?p=5のマルチファイルアップロードコードを使用していますが、値がないため、テキスト入力フィールドは必要ありません。スクリプトは、新しく選択したファイルをページのコレクションに追加するだけです。可能であれば、テキストフィールドがないと見栄えがよくなります。

回答:


169
<input type="file" id="selectedFile" style="display: none;" />
<input type="button" value="Browse..." onclick="document.getElementById('selectedFile').click();" />

これはきっと私が自分のプロジェクトで使用したことで機能するでしょう。


1
この答えはとてもシンプルでエレガントで、すべてのブラウザで機能しています。
Mike.C.フォード2015年

これは、私が見つけた最善の解決策です。さまざまなモバイルブラウザーでの実際の風変わりなファイル入力スタイルの動作を排除します。これで、ファイル入力コントロールが、レイアウトの残りの部分と同じように目立たなくなりました。どうもありがとう、1票を超えて賛成票を投じられたらいいのに
ハイダウン

...そしてonchange = "this.form.submit();"を追加します Input File要素に追加して、ファイル選択後にアップロードを開始します。すべての要素をFormタグでラップすることを忘れないでください。
トーマス

1
これはIE8以下では機能しません。フォームを送信すると、アクセス拒否エラーが発生します(「セキュリティ上の理由」により、IE8以下ではjsでファイル入力をトリガーできません)
unenthusiasticuser

3
@unenthusiasticuserは正しく、同じセキュリティ上の理由からiPadでは機能しません。:)
Mahi 2016

80

私はこれを成し遂げるためにかなりの時間を過ごしていました。Flashソリューションを使用したくなかったし、私が調べたjQueryライブラリーのどれもすべてのブラウザーで信頼できるものではありませんでした。

CSSで完全に実装された独自のソリューションを思いつきました(ボタンが「クリックされた」ように見えるようにするonclickスタイルの変更を除く)。

ここで実際の例を試すことができます: http : //jsfiddle.net/VQJ9V/307/(FF 7、IE 9、Safari 5、Opera 11、Chrome 14でテスト済み)

大きなファイル入力(font-size:50px)を作成し、固定サイズとオーバーフロー:hiddenを持つdivでラップすることで機能します。入力は、この「ウィンドウ」divを通じてのみ表示されます。divには背景の画像または色を指定でき、テキストを追加でき、入力を透明にしてdivの背景を表示できます。

HTML:

<div class="inputWrapper">
    <input class="fileInput" type="file" name="file1"/>
</div>

CSS:

.inputWrapper {
    height: 32px;
    width: 64px;
    overflow: hidden;
    position: relative;
    cursor: pointer;
    /*Using a background color, but you can use a background image to represent a button*/
    background-color: #DDF;
}
.fileInput {
    cursor: pointer;
    height: 100%;
    position:absolute;
    top: 0;
    right: 0;
    z-index: 99;
    /*This makes the button huge. If you want a bigger button, increase the font size*/
    font-size:50px;
    /*Opacity settings for all browsers*/
    opacity: 0;
    -moz-opacity: 0;
    filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0)
}

何か問題がある場合はお知らせください。修正を試みます。


4
これは私が遭遇したすべてのブラウザで機能する最高のソリューションでした
Fatal

2
あなたは男です。私はFFでこの問題に取り組んできましたが、あなたのソリューションは本当に機能する唯一のものです。特に、「font-size」を使用してアクティブ領域を増やすことにより、より大きなボタンで動作します。ありがとう!:)
jpincheira 2013年

2
スクリプトを使用せずに素晴らしいもの
Bujji

1
Twitterはそれを行いますが、これはTwitterに比べて少し複雑です。私のためにうまくいきます!
ボリューム1

良い解決策!ただ1つの質問:.fileInputに100%の幅を与え、.inputWrapperの幅をautoに設定しないのはなぜですか?
luin '28年

52

これを機能させるために、今日は一日を無駄にしました。私はここで私のシナリオのそれぞれを機能させるソリューションを見つけられませんでした。

次にテキストボックスなしのJQueryファイルアップロードの例を見ました。だから私がやったことは、私が彼らの例を取り、関連する部分にそれを取り除いたことです。

このソリューションは、少なくともIEとFFで機能し、完全にスタイルを設定できます。以下の例では、ファイルの入力は「ファイルを追加」ボタンの下に隠されています。

<html>

<head>
    <title>jQuery File Upload Example</title>
    <style type="text/css">
        .myfileupload-buttonbar input
        {
            position: absolute;
            top: 0;
            right: 0;
            margin: 0;
            border: solid transparent;
            border-width: 0 0 100px 200px;
            opacity: 0.0;
            filter: alpha(opacity=0);
            -o-transform: translate(250px, -50px) scale(1);
            -moz-transform: translate(-300px, 0) scale(4);
            direction: ltr;
            cursor: pointer;
        }
        .myui-button
        {
            position: relative;
            cursor: pointer;
            text-align: center;
            overflow: visible;
            background-color: red;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div id="fileupload" >
        <div class="myfileupload-buttonbar ">
            <label class="myui-button">
                <span >Add Files</span>
                <input id="file" type="file" name="files[]" />
            </label>
        </div>
    </div>
</body>
</html>

4
重要な部分は、コンテナーのオーバーフローが非表示に設定されていることです。
Maxim V. Pavlov

1
これは、少なくともIEとChromeでは完全に機能しました。おかげで:)
ケビンダーク

1
border-width:0 0 100px 200px; IEとChromeでも私のために働いた。ありがとう。
Paul

2
元の質問をした場合、私はこれを答えとしてマークする良識があったでしょう。ありがとう。
Mark Rendle 2013年

より良い答えは以下です。ラベルを使用して、入力を非表示にします。よく働く!
gman 2016

25

input-file要素を非表示にし、そのinput-fileのクリックイベントをトリガーする表示ボタンを作成します。

これを試して:

CSS

#file { width:0; height:0; } 

HTML:

<input type='file' id='file' name='file' />
<button id='btn-upload'>Upload</button>

JAVASCRIPT(jQuery):

$(function(){
    $('#btn-upload').click(function(e){
        e.preventDefault();
        $('#file').click();}
    );
});

私はあなたのためにすべての仕事をするjQueryプラグインを作りました:github.com/mbitto/jquery.buttonFile
Manuel Bitto

これは、IEの新しいバージョンでは機能しません。間接クリックにより、IEはフリップアウトしてアクセスを拒否します。気に障る。
Andrew

20

cssで入力ファイルのタグを非表示にし、ラベルを追加して、それを入力ボタンに割り当てます。ラベルはクリック可能で、クリックするとファイルダイアログが表示されます。

<input type="file" name="imageUpload" id="imageUpload" class="hide"/> 
<label for="imageUpload" class="button-style">Select file</label>

スタイルをボタンとしてラベルに追加します。
ライブデモ


1
2015年2月4日のSafariで
正常に動作します

これが最も簡単で最良の答えかもしれません。また、onchangeハンドラーをに追加して、inputJSコードがアップロードされたファイル情報を取得できるようにします。
デビッドRトリブル

16

それは非常に難しいでしょう。ファイル入力タイプの問題は、通常、1つのDOM要素として扱われる一方で、2つの視覚要素で構成されることです。それに加えて、いくつかのブラウザーはファイル入力に対して独自のルックアンドフィールを備えており、悪夢に陥ります。quirksmode.orgでこの記事を参照してくださいファイル入力の癖については、。私はそれがあなたを幸せにしないことを保証します(私は経験から話します)。

[編集]

実際には、コンテナー要素(divなど)に入力を配置し、要素に負のマージンを追加することで問題がなくなると思います。画面からテキストボックス部分を効果的に隠す。別のオプションは、リンクした記事の手法を使用して、ボタンのようにスタイルを設定することです。


4
quirksmodeに関するその記事は素晴らしいです。ただし、ファイル入力のスタイルを設定するのは依然として困難です。:P
MitMaro 2009

ユーザーごとに異なるブラウザースタイルと最小フォントサイズが異なることを考慮すると、含まれているnetagive-marginはうまく機能しないと思います。
joebert 2009

1
joebert:同意します。最善の選択肢は、今でもquirksmodeの記事に表示されている手法であり、いかに苦痛なハッキングであると思います...
Erik van Brakel

14

すべてのブラウザーで機能するように修正しました解決済み:

      <input type = "button" value = "Choose image" 
       onclick ="javascript:document.getElementById('imagefile').click();">
      <input id = "imagefile" type="file" style='visibility: hidden;' name="img"/>

私はFF、Chrome、IEでテストしました-正常に動作し、適用されたスタイルも:D


6
私はそれがすべてのブラウザー(最後にテストしたときのFFとIEを含む)で動作しないことを確信しています-動作したことを覚えているブラウザーはChromeだけでした。
Herman Schaaf、

これはjQueryでのみ機能しますが、スタンドアロンのソリューションではありません。
ソレノイド

3
これは機能しているように見えます(ファイル選択メニューが表示されます)が、フォームが送信されると、セキュリティ上の理由から、ファイルはFireFoxおよびIEで送信されません。
アンパサンドレ2011年

13

私は上位2つのソリューションを実装しようとしましたが、結局それは私にとって膨大な時間の無駄になりました。最後に、この.cssクラスを適用することで問題が解決しました...

input[type='file'] {
  color: transparent;
}

できた!超クリーンで超シンプル...


1
これは素晴らしい方法です!
Kaow

9

これを行う別の簡単な方法。HTMLで「入力タイプファイル」タグを作成して非表示にします。次に、ボタンをクリックして、必要に応じてフォーマットします。この後、ボタンがクリックされたときにjavascript / jqueryを使用してプログラムでinputタグをクリックします。

HTML:-

<input id="file" type="file" style="display: none;">
<button id="button">Add file</button>

JavaScript:-

document.getElementById('button').addEventListener("click", function() {
    document.getElementById('file').click();
});

jQuery:-

$('#button').click(function(){
    $('#file').click();
});

CSS:-

#button
{
    background-color: blue;
    color: white;
}

これは同じための動作するJSフィドルです:-http : //jsfiddle.net/32na3/


2
これは素晴らしいソリューションですが、Chromeで動作させることができません。どうやら他の人もできません。セキュリティ上の理由から、OperaとChromeでは入力タイプのファイルをクリックできません。ここで、これと私のために働いた解決策の詳細を見つけることができます:stackoverflow.com/a/3030174/2650732
wojjas '24

私がこの答えを書いたとき、それはクロームに働きました。私に知らせてくれてありがとう、それに応じて私の答えを更新します
divyenduz

7

上記で推奨されたコードの一部を使用し、何時間も腰を下ろした後、最終的にcss bag freeソリューションにたどり着きました。

ここで実行できます- -http://jsfiddle.net/WqGph/

しかし、より良い解決策を見つけました-http://jsfiddle.net/XMMc4/5/

 <input type = "button" value = "Choose image #2" 
   onclick ="javascript:document.getElementById('imagefile').click();">
       <input id = "imagefile" type="file" style='display:none;' name="img" value="none"/>see jsfiddle code for examples<br/>

問題はonchange、非表示input要素に対してイベントがトリガーされないことです。
David R Tribble

6

ここに私の良いオールレメディがあります:

<input type="file" id="myFile" style="display:none;" />
<button type="button" onclick="document.getElementById('myFile').click();">Browse</button>

少なくともSafariでは機能しました。

簡潔でシンプル。


4

画像にラベルを付けると、画像をクリックするとボタンのクリックイベントがトリガーされます。通常のボタンを非表示にするだけです。

<form>
    <label for="fileButton"><img src="YourSource"></label>    <!--You don't have to put an image here, it can be anything you like-->
    <input type="file" id="fileButton" style="display:none;"/>
</form>

すべてのブラウザで動作し、非常に使いやすいです。


4

次のように非表示のファイル入力でクリックイベントをディスパッチできます。

<form action="#type your action here" method="POST" enctype="multipart/form-data">
   		<div id="yourBtn" style="height: 50px; width: 100px;border: 1px dashed #BBB; cursor:pointer;" >Click to upload!</div>
    	<!-- hide input[type=file]!-->
    	<div style='height: 0px;width:0px; overflow:hidden;'><input id="upfile" type="file" value="upload"/></div>
    	<input type="submit" value='submit' >
    </form>

    <script type="text/javascript">
    	var btn = document.getElementById("yourBtn");
    	var upfile = document.getElementById("upfile"); 
    	btn.addEventListener('click',function(){
    		if(document.createEvent){
    			var ev = document.createEvent('MouseEvents');
    			ev.initEvent('click',true,false);
    			upfile.dispatchEvent(ev);
    		}else{
        		upfile.click();
    		}
    	});
    
    </script>


var ev = document.createEvent('HTMLEvents'); HTMLEventsをMouseEventsに変更しますvar ev = document.createEvent('MouseEvents');
jiang min

よかった、ありがとう!あなたの投稿を実行可能なコードスニペットに変換し、HtmlEventsをMouseEventsに変更しました
Fabian Schmengler

4

HTML:

<input type="file" name="upload" id="upload" style="display:none"></input>
    <button  id="browse">Upload</button>

JQUERY

 $(document).ready(function(){
        $("#browse").click(function(){
        $("#upload").click();
        });
 });

これがうまくいくことを願っています:)


4

入力要素にフォントの不透明度0を指定できます。これにより、[ファイルを選択]ボタンを非表示にせずにテキストフィールドが非表示になります。

JavaScriptは必要ありません。IE9までのクロスブラウザーをクリアします

例えば、

input {color: rgba(0, 0, 0, 0);}

3

これで本当にハックな解決策を...

<style type="text/css"> 
    input[type="file"]
    { 
        width: 80px;        
    } 
</style>

<input id="File1" type="file" />

問題は、テキストフィールドを非表示にしている幅属性が、ブラウザ間やWindows XPのテーマ間で明らかに異なるなどです。多分それはあなたが一緒に働くことができる何かですか?...


これはIE6では機能しませんが、ブラウザーは属性セレクターを認識しません。
エイドリアン・ゴドン

3

私はこれが古い投稿であることを知っていますが、テキストを消えさせる簡単な方法は、テキストの色をあなたの背景の色に設定することです。

たとえば、テキスト入力の背景が白の場合:

input[type="file"]{
color:#fff;
}

これは、Choose Fileテキストには影響しませんが、ブラウザのために黒のままです。


1
ユーザーがその部分をクリックすると、アップロードポップアップが開きます。
Praveen 2013

3

これは私にとってはうまくいきます:

input[type="file"]  {
    color: white!important;
}

2

私の解決策は、「druveen」のようにdiv内に設定することですが、独自のボタンスタイルをdivに追加し(a:hoverのあるボタンのように見せます)、スタイルを「opacity:0;」に設定します。入力に。私にとっては魅力的ですが、あなたにも同じことを願っています。


2

入力ファイルの幅を85pxに設定したところ、テキストフィールドがまったく表示されなくなりました


それで、テキストフィールドは消えたのでしょうか?「まったく」のmighrはそこで否定を意味しますが、文法に欠陥があります(したがってあいまいです)。
Kirk Woll 2014

2

このHTMLコードは[ファイルのアップロード]ボタンのみを表示します

<form action="/action_page.php">
    <input type="button" id="id" value="Upload File"  onclick="document.getElementById('file').click();" />
    <input type="file" style="display:none;" id="file" name="file" onchange="this.form.submit()"/>  
</form>

1
コードスニペットの機能を説明するコンテキスト情報を回答に追加することを検討してください。
クライスターズ2017

1
<a href="#" id="select_logo">Select Logo</a> <input type="file" id="logo"> 

$("#logo").css('opacity','0');

$("#select_logo").click(function(){
   $().trigger('click');
   return false;
});

1

私にとって、最も簡単な方法は、背景色のようなフォント色を使用することです。シンプルでエレガントではありませんが、便利です。

<div style="color:#FFFFFF">   <!-- if background page is white, of course -->
<input class="fileInput" type="file" name="file1"/></div>

1

これが、すべてのブラウザでこれを行うための最良の方法です。

CSSを忘れて!

<p>Append Image:</p> 
<input type="button" id="clickImage" value="Add Image" />
<input type="file" name="images[]" id="images" multiple />

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" charset="utf-8"></script>

<script>
$('#images').hide();        
$('#clickImage').click( function() {    
    $('#images').trigger('click');  
});
</script>

これはSAFARIでは機能しません...セキュリティ上の理由から.trigger( 'click')を許可しないためです:?Safariで機能させるには、ファイルボタンを動的に作成し、再度読み込まれたときに再度追加します
user1965301

1

これらの答えはすべてかわいいですが、CSSはすべてのブラウザーとデバイスで同じではないため機能しません。私が書いた最初の回答はSafari以外のすべてで機能します。すべてのブラウザで常に機能するようにするには、動的に作成し、入力テキストをクリアするたびに再作成する必要があります。

    var imageDiv = document.createElement("div");   
    imageDiv.setAttribute("id", "imagediv");
    imageDiv.style.cssText = 'position:relative; vertical-align: bottom;';  
    var imageText = document.createTextNode("Append Image:");
    var newLine = document.createElement("br"); 
    var image = document.createElement("input");    
    image.setAttribute("type", "file");
    image.setAttribute("id", "images");
    image.setAttribute("name", "images[]");     
    image.setAttribute("multiple", "multiple");
    imageDiv.appendChild(imageText); 
    imageDiv.appendChild(newLine); 
    imageDiv.appendChild(image); 
    questionParagraph.appendChild(imageDiv);

1

tmantheyの答えは非常に良いですが、Firefox v20ではborder-widthで遊ぶことができません。あなたが表示された場合、リンクボタンが大きく取得するFirefox用(-300px、0PX)スケール(4)を変換:彼らは、変換、フォントサイズ= 23pxを使用して問題を解決し(デモを、本当にここに表示することはできません)。

ドラッグアンドドロップ入力ボックスにしたい場合、別のdivで.click()を使用する他のソリューションは役に立ちません。


1

ここにはいくつかの有効なオプションがありますが、同様の問題を修正しようとしているときに私が思いついたものをあげようと思いました。 http://jsfiddle.net/5RyrG/1/

<span class="btn fileinput-button">
    <span>Import Field(s)</span>
    <input id="fileupload" type="file" name="files[]" onchange="handleFiles(this.files)" multiple>
</span>
<div id="txt"></div>

function handleFiles(files){
    $('#txt').text(files[0].name);  
}

1

次のコードで解決しました:

<div style="overflow: hidden;width:83px;"> <input style='float:right;' name="userfile" id="userfile" type="file"/> </div>


1

私はこれを書いた:

<form action='' method='POST' name='form-upload-image' id='form-upload-image' enctype='multipart/form-data'>

    <div style="width: 0; height: 0; overflow: hidden;">
        <input type="file" name="input-file" id="input-file" onchange="this.files.length > 0 ? document.getElementById('form-upload-image').submit():null;" />
    </div>
    
</form>

<img src="image.jpg" style="cursor: pointer;" onclick="document.getElementById('input-file').click();" />

すべてのブラウザで正常に動作します。jQueryもCSSもありません。


1

以下は、すべての主要なブラウザで機能する@ampersandreの人気のあるソリューションの簡易バージョンです。Asp.NETマークアップ

<asp:TextBox runat="server" ID="FilePath" CssClass="form-control"
    style="float:left; display:inline; margin-right:5px; width:300px"
    ReadOnly="True" ClientIDMode="Static" />
<div class="inputWrapper">
    <div id="UploadFile" style="height:38px; font-size:16px; 
      text-align:center">Upload File</div>
    <div>
      <input name="FileUpload" id="FileInput" runat="server" 
             type="File" />
    </div>
  </div>
  <asp:Button ID="UploadButton" runat="server" 
    style="display:none" OnClick="UploadButton_Click" />
</div>
<asp:HiddenField ID="hdnFileName" runat="server" ClientIDMode="Static" />

jQueryコード

$(document).ready(function () {

   $('#UploadFile').click(function () {
       alert('UploadFile clicked');
       $('[id$="FileInput"]').trigger('click');
   });

   $('[id$="FileInput"]').change(function (event) {
       var target = event.target;
       var tmpFile = target.files[0].name;
       alert('FileInput changed:' + tmpFile);
       if (tmpFile.length > 0) {
          $('#hdnFileName').val(tmpFile);
       }
       $('[id$="UploadButton"]').trigger('click');
   });
});

CSSコード

.inputWrapper {
height: 38px;
width: 102px;
overflow: hidden;
position: relative;
padding: 6px 6px;
cursor: pointer;
white-space:nowrap;
/*Using a background color, but you can use a background image to represent
 a button*/
background-color: #DEDEDE;
border: 1px solid gray;
border-radius: 4px;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
user-select: none;
}

非表示の「UploadButton」クリックトリガーを標準のサーバーポストバックに使用します。with "Upload File"テキストは、オーバーフローしたときにラッパーdivの入力コントロールをビューの外に押し出すため、 "file input"コントロールdivにスタイルを適用する必要はありません。$([id $ = "FileInput"])セレクターは、標準のASP.NETプレフィックスが適用されたIDのセクションを許可します。ファイルがアップロードされると、FilePathテキストボックスの値は、hdnFileName.Valueの後ろのサーバーコードから設定されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.