Як змінити текст кнопки <input type = "file" />?


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

Я намагався змінити value, але це не працює. Як налаштувати текст кнопки?


Ви говорите про назву файлу або текст кнопки?
Артелій

Відповіді:


153

Використовуйте Bootstrap FileStyle , який використовується для стилювання файлових полів форм. Це плагін для бібліотеки компонентів на основі jQuery під назвою Twitter Bootstrap

Використання зразка:

Включати:

<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.">

Здається, це не працює для мене. На ньому все ще відображаються кнопки за замовчуванням броузера. Також демонстрація на github.com/markusslima/bootstrap-filestyle.git також не працює - усі приклади показують кнопки за замовчуванням. Я щось пропускаю?
Я.

7
@Tony Uhh .... чому ви думаєте, що Bootstrap також не використовує "дурний <img /> хак"? :-)
Andz

@Я ви можете сказати, який браузер та його версію? Тестується зараз на версії Chrome 43.0.2357.130 (64-розрядна) в Linux, і всі приклади працюють чудово.
Фернандо Кош

20
Закидання бібліотеки javascript (із плагіном!) На таку невелику проблему - це неелегантний надмір.
МКаама

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');
});

CAVEAT : У IE9 та IE10, якщо ви запускаєте onClick у введенні файлу через javascript, форма буде позначена як "небезпечна" і не може бути представлена ​​за допомогою javascript, не впевнений, чи можна її подавати традиційно.


5
Це розумне рішення. Чи не могли ви це зробити також із елементом <button>?
Командир коду

1
@Code Commander - Дякую, і так, ви можете це зробити з будь-яким потрібним елементом, але найпоширенішим є елемент <image>. Просто позбудьтесь кнопки + текстового поля "введення файлу" ...
ParPar

2
Деякі мобільні браузери переглядають лише тих, хто використовує вищезазначене, програмно відключає натискання клавіш введення файлів. Зокрема, андроїд 4 для Galaxy S III
стрічки новин

Я використовую <input type="file" внутрішню рядок gridp asp.net, рядки якої можна динамічно додавати .. тож буде справжньою болем в голові викликати відповідний тригер клацання входу (того ж ряду) під час натискання на зображення! : /
sohaiby

ваше рішення не працює. Ви пролі не встановили кордону, поля, підкладки та фонового кольору, або це було б очевидно
Ян Беллаванс

88

Сховати введення файлу. Створіть новий вхід для захоплення події клацання та перешліть його на прихований вхід:

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

вкидання файлу HTA в режимі ie7, мені довелося видалити ;кінець.
АТек

чудово, не хочу включати завантажувальну програму просто для зміни двох слів тексту, але як би ви це зробили, якби введення файлу було створено динамічно?
аспаризм

@asparism використовує JavaScript, щоб маніпулювати DOM, приховати його, встановивши його стиль та використати до () та додати новий елемент введення?
MushyPeas

3
@MushyPeas - це найпростіший спосіб. намагався грати з css, але це рішення набагато швидше і простіше. дякую
Мара

2
Це було і для мене найпростішим способом! Це також дозволило мені СТИЛЮВАТИ кнопку «макет» файлу як один із наборів інших параметрів кнопки форми - не турбуючись про відображення дивної файлової кнопки «Огляд».
Гаррі Мантеакіс

47

Текст "Завантажити файл ..." заздалегідь визначений браузером, і його неможливо змінити. Єдиний спосіб подолати це - використовувати компонент завантаження на основі Flash або Java swfupload .


3
Чи можете ви довести, що це неможливо змінити?
user198729

Або переглянувши вихідні коди браузерів, принаймні для відкритих кодів.
Пекка

Це може відповісти (на інше запитання, на зразок "Чому вміст значення" VALUE = "C: \ someFile.txt" "для поля введення файлу типу" TYPE = "FILE" ', ігнорується браузер? "): stackoverflow.com/questions/1342039
Пітер Мортенсен

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 він ідеально працює. Ви працюєте, щоб вирішити проблему сумісності браузера, будь ласка, зверніться до CSS BOX MODEL, щоб зменшити проблему.
Код Чорний

1
Можливо, проблема полягає в тому, що FF побудований на Gecko, а не на вебкіті. (моя найкраща здогадка)
Cullub

2
<label id = "addButton" for = "Завантажити" style = "background-color: # 000; color: #fff; padding: 4px; border-radius: 4px; family-font: monospace;" > Виберіть деякий файл </label> <input id = "Завантажити" type = "файл" multiple = "multiple" name = "_ photos" accept = "image / *" style = "vidibility: hidden">
Чорний код

4
Добре, дякую! Перевірте цей JSFiddle . Якщо ви відредагуєте свою відповідь на це, я вважаю, що це заслуговує на підсумок :)
Cullub

10

Це плагін JQuery для зміни тексту кнопки елемента вхідного файлу.

Приклад HTML:

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

Приклад JS:

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

Результат:

результат плагіна



8

Просто

<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
Кен Карло

Дякую, саме те, що я хотів :)
Гарт Бейкер

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

EDIT : Я бачу зараз за коментарями, які ви запитуєте про текст кнопки, а не шлях до файлу. Моє ліжко. Я залишу свою оригінальну відповідь нижче, якщо хтось, хто наткнеться на це питання, трактує її так, як я це робив спочатку.

2-е редагування : Я видалив цю відповідь, тому що вирішив, що я неправильно зрозумів питання, і моя відповідь не була актуальною. Однак коментарі в іншій відповіді вказували на те, що люди все-таки хочуть бачити цю відповідь, тому я її визнаю.

МОЙ ОРИГІНАЛЬНИЙ ВІДПОВІДЬ (я думав, що ОП питає про шлях, а не про текст кнопки):

Ця функція не підтримується з міркувань безпеки . Веб-браузер Opera використовувався для підтримки, але його було видалено. Подумайте, що було б можливо, якби це було підтримано; Ви можете зробити сторінку зі входом для завантаження файлу, попередньо заповнити її шляхом до якогось чутливого файлу, а потім автоматично надіслати форму за допомогою javascript, що викликається onloadподією. Це станеться занадто швидко, щоб користувач нічого з цього не зробив.


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 & bootstrap

        <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 додаток папки / активи / javascripts /
  • відкрийте свою application.js і додайте цей рядок нижче

    // = вимагають bootstrap-filestyle.min

  • відкрийте свою каву і додайте цей рядок

    $ (": файл"). стиль файлу ({buttonName: "btn-basic", buttonBreafore: true, buttonText: "Ваш текст тут", 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 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 я бачу і текст ЗАВАНТАЖЕННЯ ІМІДЖ, і кнопку <Введення>. Можливо, хром обробляє введення файлів, змінившись після опублікування цього повідомлення?
EricP

@ yan-bellavance що ти робиш? Якщо ви вважаєте, що відповідь є невірною чи не корисною, оскаржуйте, але жодним чином не обмежуйте її!
Каїдо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.