<input type =“ file” />のボタンテキストを変更するにはどうすればよいですか?


257
<input type="file" value="Browse" name="avatar" id="id_avatar" />

を変更しようとしましたがvalue、機能しません。ボタンのテキストをカスタマイズするには?


ファイル名またはボタンのテキストについて話しているのですか?
Artelius 2009

回答:


153

使用ブートストラップFileStyle形式のファイルフィールドのスタイルを設定するために使用され、。Twitter Bootstrapと呼ばれるjQueryベースのコンポーネントライブラリのプラグインです。

使用例:

含める:

<script type="text/javascript" src="js/bootstrap-filestyle.min.js"> </script>

JavaScript経由:

$(":file").filestyle();

データ属性を介して:

<input type="file" class="filestyle" data-classButton="btn btn-primary" data-input="false" data-classIcon="icon-plus" data-buttonText="Your label here.">

うまくいっていないようです。それはまだbrorserのデフォルトのボタンを示しています。また、github.com / markusslima / bootstrap - filestyle.gitのデモも 機能しません。すべての例にデフォルトのボタンが表示されています。何か不足していますか?
はい。

7
@Tony Uhh .... Bootstrapが「奇妙な<img />ハック」も使用していないと思われる理由は何ですか?:-)
Andz

@はい、どのブラウザとそのバージョンかわかりますか?LinuxのChromeバージョン43.0.2357.130(64ビット)でテストされ、すべての例が完全に動作します。
Fernando Kosh、2015

20
そのような小さな問題にJavaScriptのライブラリを(プラグインを使って!)投げるのは、あまりにもやりすぎです。
MKaama 2016

3
反対投票。それも答えではなく、追加のライブラリを必要とする回避策です。答えは、ブラウザのレンダリング動作を変更することを目的としています。
wdetac

108

代わりに画像を配置して、次のようにすることができます。

HTML:

<img src="/images/uploadButton.png" id="upfile1" style="cursor:pointer" />
<input type="file" id="file1"  name="file1" style="display:none" />

jQuery:

$("#upfile1").click(function () {
    $("#file1").trigger('click');
});

警告:IE9およびIE10では、JavaScriptを介して入力されたファイルでonClickをトリガーすると、フォームに「危険」のフラグが付けられ、JavaScriptで送信できなくなります。従来の方法で送信できるかどうかは不明です。


5
これは賢い解決策です。<button>要素でもこれを実行できませんか?
コードコマンダー

1
@Code Commander-ありがとうございます。そうです。必要なすべての要素を使用して実行できますが、最も一般的なのは<image>要素です。「ファイル入力」のボタン+テキストフィールドを削除するだけ
ParPar

2
上記を使用しているすべての人の目を引くだけですが、一部のモバイルブラウザーはプログラムによるファイル入力クリックのトリガーを無効にします。具体的には、Galaxy S III向けのandroid 4
newshorts '24年

私は<input type="file" asp.netグリッドビュー行を使用していますが、その行は動的に追加できます。そのため、画像をクリックしているときに(同じ行の)関連する入力クリックトリガーを呼び出すのは頭の痛い作業です。:/
sohaiby

あなたのソリューションは機能しません。境界線、マージン、パディング、背景色を多めに設定しなかったか、それ以外の場合は明白です
yan bellavance

88

ファイル入力を非表示にします。新しい入力を作成してクリックイベントをキャプチャし、非表示の入力に転送します。

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

ie7モードでHTAファイルをスローする;と、最後にを削除する必要がありました。
ATek 2017

テキストの2ワードを変更するためだけにブートストラップを含めたくありませんが、ファイル入力が動的に作成された場合はどうしますか?
asparism 2017

@asparismはJavaScriptを使用してDOMを操作し、スタイルを設定して非表示にし、before()を使用して新しい入力要素を追加しますか?
MushyPeas 2017

3
@MushyPeasそれは最も簡単な方法です。CSSで遊んでみましたが、このソリューションははるかに速くて簡単です。感謝
Mara

2
これも私にとって最も簡単な方法でした!また、「モック」ファイルボタンを他のフォームボタンオプションのセットの1つとしてスタイル設定することもできました。
Harry Mantheakis

47

「ファイルをアップロード...」というテキストはブラウザによって事前に定義されており、変更できません。これを回避する唯一の方法は、swfuploadのようなFlashまたはJavaベースのアップロードコンポーネントを使用することです


3
変更できないことを証明できますか?
user198729 2009

または、ブラウザのソースコードを閲覧することにより、少なくともオープンソースのソースコードでは。
Pekka、

これは、別の質問に対する回答である可能性があります(タイプファイルの入力フィールド「TYPE = "FILE"」の「値の内容、「VALUE = "C:\ someFile.txt」のようなものです。ブラウザ?」):stackoverflow.com/questions/1342039
Peter Mortensen、

23

作品すべてのブラウザで完全にそれはあまりにもあなたのために働くことを願っています。

HTML:
<input type="file" class="custom-file-input">

CSS:

 .custom-file-input::-webkit-file-upload-button {
  visibility: hidden;
}
.custom-file-input::before {
  content: 'Select some files';
  display: inline-block;
  background: -webkit-linear-gradient(top, #f9f9f9, #e3e3e3);
  border: 1px solid #999;
  border-radius: 3px;
  padding: 5px 8px;
  outline: none;
  white-space: nowrap;
  -webkit-user-select: none;
  cursor: pointer;
  text-shadow: 1px 1px #fff;
  font-weight: 700;
  font-size: 10pt;
}
.custom-file-input:hover::before {
  border-color: black;
}
.custom-file-input:active::before {
  background: -webkit-linear-gradient(top, #e3e3e3, #f9f9f9);
}

content: 'Select some files';希望するテキストで変更する''

Firefoxで動作しない場合は、入力の代わりにこれを使用します。

<label class="custom-file-input" for="Upload" >
</label>

<input id="Upload" type="file" multiple="multiple" name="_photos" accept="image/*" style="visibility: hidden">

ただし、Safariで動作します
Cullub

私の最後のFF 41.0.2で完全に機能しています。クロスブラウザーの互換性の問題が発生しています。CSSBOX MODELを参照して問題を最小限に抑えてください。
Code Black

1
問題は、FFがWebkitではなくGecko上に構築されていることです。(私の推測)
Cullub

2
<label id = "addButton" for = "Upload" style = "background-color:#000; color:#fff; padding:4px; border-radius:4px; font-family:monospace;" >いくつかのファイルを選択</ label> <input id = "Upload" type = "file" multiple = "multiple" name = "_ photos" accept = "image / *" style = "visibility:hidden">
コードブラック

4
はい、ありがとう!このJSFiddleをチェックしてください。それを使って回答を編集した場合、
賛成票を投じる

10

このは、入力ファイル要素のボタンテキストを変更するためのJQueryプラグインです。

HTMLの例:

<input type="file" id="choose-file" />

JSの例:

$('#choose-file').inputFileText({
    text: 'Select File'
});

結果:

プラグインの結果



9

単に

<label class="btn btn-primary">
  <i class="fa fa-image"></i> Your text here<input type="file" style="display: none;"  name="image">
</label>

[スニペットで編集]

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>

<label class="btn btn-primary">
<i class="fa fa-image"></i> Your text here<input type="file" style="display: none;" name="image">
</label>


ここで私が作ったものを見てみてくださいjsfiddle.net
Ken Karlo

ありがとう、まさに私が欲しかったものです:)
Garth Baker

7

私はこれがあなたが望むものだと思います:

<button style="display:block;width:120px; height:30px;" onclick="document.getElementById('getFile').click()">Your text here</button>


<input type='file' id="getFile" style="display:none"> 

3

編集:私は今、あなたがボタンのテキストについて尋ねているコメントで、ファイルパスではなくわかります。私の悪い。この質問につまずいた誰かがそれを私が最初に行った方法で解釈する場合に備えて、私は元の回答を以下に残します。

2番目の編集:私は質問を誤解し、自分の回答は関連性がないと判断したため、この回答を削除しました。ただし、別の回答のコメントは、人々がまだこの回答を見たいと思っていることを示していたので、削除を取り消します。

私の元の答え私の元の(OPはボタンのテキストではなく、パスについて尋ねていると思いました):

これは、セキュリティ上の理由からサポートされている機能ではありません。Opera Webブラウザーはこれをサポートするために使用されていましたが、削除されました。これがサポートされている場合、何が可能かを考えてください。ファイルアップロード入力を含むページを作成し、機密ファイルへのパスを事前に入力してから、onloadイベントによってトリガーされるJavaScriptを使用してフォームを自動送信できます。これは、ユーザーがそれについて何かを行うには速すぎます。


3

<label>キャプションに使用

<form enctype='multipart/form-data' action='/uploads.php' method=post>
<label for=b1>
    <u>Your</u> caption here
<input style='width:0px' type=file name=upfile id=b1
 onchange='optionalExtraProcessing(b1.files[0])'
 accept='image/png'>
</label>
</form>

これはjavascriptなしで動作します。ラベルはどんな複雑さでも、心ゆくまで飾ることができます。ラベルをクリックすると、クリックは自動的にファイル入力にリダイレクトされます。ファイル入力自体は、任意の方法で非表示にすることができます。ラベルをボタンのように表示したい場合は、次のような多くの解決策があります。

label u {
    -webkit-appearance: button;
    -moz-appearance: button;
    appearance: button;

    text-decoration: none;
    color: initial;
}

2

CSSとブートストラップクラスのみ

        <div class="col-md-4 input-group">
            <input class="form-control" type="text"/>
            <div class="input-group-btn">
                <label for="files" class="btn btn-default">browse</label>
                <input id="files" type="file" class="btn btn-default"  style="visibility:hidden;"/>
            </div>
        </div>

1
  1. その前<input type="file">に、画像を追加すると<input style="position:absolute">、そのスペースを占有します<input type="file">
  2. 次のCSSをファイル要素に使用します

    position:relative;  
    opacity:0;  
    z-index:99;

0

レールを使用していて問題が発生した場合は、@ Fernando Koshによって投稿された元の回答からいくつかのヒントを追加したいと思います

  • ファイルzipをダウンロードし、ファイルbootstrap-filestyle.min.js keをコピーしますapp / assets / javascripts /
  • application.jsを開き、以下の行を追加します

    // = bootstrap-filestyle.minが必要

  • コーヒーを開いてこの行を追加します

    $( ":file")。filestyle({buttonName: "btn-primary"、buttonBefore:true、buttonText: "Your text here"、icon:false});


0

あなたは単にいくつかのCSSトリックを追加することができます。あなたはjavascriptまたはより多くの入力ファイルを必要せず、私は既存の値属性を保持しますcssのみを追加する必要があります。この解決策を試すことができます。

.btn-file-upload{
     width: 187px;
     position:relative;
 }

.btn-file-upload:after{
    content:  attr(value);
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;    
    width: 48%;
    background: #795548;
    color: white;
    border-radius: 2px;
    text-align: center;
    font-size: 12px;
    line-height: 2;
 }
<input type="file" class="btn-file-upload" value="Uploadfile" />


0

純粋なHTMLとJavaScriptを使用して、入力のテキストをファイルタイプで「変更」する方法を次に示します。

<input id='browse' type='file' style='width:0px'>
<button id='browser' onclick='browse.click()'>
    *The text you want*
</button>

0

私にとっては、bootstrap-filestyleでカスタムテキストを機能させません。ボタンの装飾には役立ちますが、テキストを変更するのは奇妙ですが、cssと格闘する前に、次のことを試します。

$( document ).ready(function() {
   $('.buttonText').html('Seleccione ficheros');
});

bootstrap-filestyleは、コンポーネントをbutonTextという名前のクラスを持つスパンとしてレンダリングするため、ドキュメントのロード時にテキストを変更するだけです。簡単で、すべてのブラウザで機能する必要があります。

乾杯


0

私のプロジェクトでは次のようにしました:

.btn-outlined.btn-primary {
  color: #000;
}
.btn-outlined.btn-primary:active, .btn-outlined.btn-positive:active, .btn-outlined.btn-negative:active {
  color:#000;
}
.btn-block {
  display: block;
  width: 100%;
  padding: 15px 0;
  margin-bottom: 10px;
  font-size: 18px;
  font-family: Arial, Helvetica, sans-serif;
  text-align: center;
}
<label for="fileUpload" class="btn btn-primary btn-block btn-outlined">Your text</label>
<input type="file" id="fileUpload"style="display: none;">


-1

これは、役立つ可能性のある代替ソリューションです。これにより、ボタンの外に表示されるテキストが非表示になり、divの背景色と混合されます。次に、divに好きなタイトルを付けることができます。

<div style="padding:10px;font-weight:bolder; background-color:#446655;color: white;margin-top:10px;width:112px;overflow: hidden;">
     UPLOAD IMAGE <input style="width:100px;color:#446655;display: inline;" type="file"  />
</div>

Chrome 39では、画像のアップロードテキストと<input>ボタンの両方が表示されます。おそらくこれを投稿してから、ファイル入力のchromeの処理が変更されましたか?
EricP、2014

@ yan-bellavance何してるの?答えが正しくない、または役に立たないと思われる場合は、反対票を投じてください。
カイイド2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.