Як змінити текст кнопки <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.