Змініть “Не вибрано файл”:


90

У мене є кнопка "Вибрати файл" наступним чином (я використовую Jade, але вона повинна бути такою ж, як Html5):

 input(type='file', name='videoFile')

У браузері відображається кнопка з текстом поруч із текстом "Файл не вибрано". Я хотів би змінити текст "Не вибрано файл" на щось інше, наприклад "Не вибрано відео" або "Виберіть відео, будь ласка". Тут я дотримувався перших пропозицій:

Я не хочу бачити "жодного файлу не вибрано" для поля введення файлу

Але це не змінило тексту:

 input(type='file', name='videoFile', title = "Choose a video please")

Хтось може допомогти мені з’ясувати, де проблема?



1
@MahmoudFarahat Я не хочу його видаляти, я хочу змінити текст
FranXh

Ви не можете видалити текст і поставити поруч мітку-заповнювач?
Роджер Ліпскомб

На це є справді акуратна відповідь в іншому дописі. stackoverflow.com/a/21842275/3653494
P-Bagels

це дуже можливо: перевірте це швидке рішення - включає інші речі, просто прокрутіть униз
darga33

Відповіді:


17

Я майже впевнений, що ви не можете змінити мітки за замовчуванням на кнопках, вони жорстко закодовані у браузерах (кожен браузер робить підписи кнопок по-своєму). Перегляньте цю статтю про стиль кнопок


6
Це не мітка на кнопці, а «Не вибраний файл» поруч. Коли я вибираю файл, він змінюється з Не вибраний файл на fileName.something. Тому я вважаю, що це має бути змінним.
FranXh

@JeremyThille, бо люди - це люди.
атп

216

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

<input type="file" id="files" class="hidden"/>
<label for="files">Select file</label>

Потім укладіть етикетку як кнопку, якщо хочете.


1
Це навіть працює в IE9, де ви не можете приховати file inputта натиснути його з JavaScript. Дякую!
huysentruitw

1
Це чудово. Елегантність хакі. Любіть це.
Бен

3
Чудове рішення, це має бути прийнята відповідь.
Мультитут

1
Чудове рішення, воно навіть дозволяє простий спосіб налаштування поля
SAFAD

8
Цікаве HTML-рішення, але погане для зручності використання. Користувач завжди бачитиме "Вибрати файл" або еквівалент, навіть після вибору файлу.
Ктулху

26

Спробуйте це просто фокус

<input type="file" name="uploadfile" id="img" style="display:none;"/>
<label for="img">Click me to upload image</label>

Як це працює

Це дуже просто. елемент Label використовує тег "for" для посилання на елемент форми за ідентифікатором. У цьому випадку ми використовували "img" як контрольний ключ між ними. Після цього кожен раз, коли ви натискаєте на ярлик, він автоматично запускає подію клацання елемента форми, яка в нашому випадку є подією натискання елемента файлу. Потім ми робимо елемент файлу невидимим, використовуючи display: none і not visibility: hidden, щоб він не створював порожній простір.

Насолоджуйтесь кодуванням


2
Ви можете покращити цю відповідь, пояснивши, як це працює.
user8397947

Здається, перетягування файлів не працює, коли ви це робите.
fonZ

16

http://jsfiddle.net/ZDgRG/

Див. Посилання вище. Я використовую css, щоб приховати текст за замовчуванням, і використовую мітку, щоб показати, що я хочу:

<div><input type='file' title="Choose a video please" id="aa" onchange="pressed()"><label id="fileLabel">Choose file</label></div>

input[type=file]{
    width:90px;
    color:transparent;
}

window.pressed = function(){
    var a = document.getElementById('aa');
    if(a.value == "")
    {
        fileLabel.innerHTML = "Choose file";
    }
    else
    {
        var theSplit = a.value.split('\\');
        fileLabel.innerHTML = theSplit[theSplit.length-1];
    }
};

13

Правильно, неможливо видалити цей "не вибраний файл", навіть якщо у вас є список попередньо завантажених файлів.

Найпростішим рішенням, яке я знайшов (і працює над IE, FF, CR), є наступне

  1. Сховайте введені дані та додайте кнопку "файли"
  2. потім зателефонуйте кнопці "файли" і попросіть його прив'язати завантаження файлів (у цьому прикладі я використовую JQuery)

$('.addfiles').on('click', function() { $('#fileupload').click();return false;});
<button class="addfiles">Add Files</button>
<input id="fileupload" type="file" name="files[]" multiple style='display: none;'>

Це зроблено, працює чудово :)

Фред


7

$(function () {
     $('input[type="file"]').change(function () {
          if ($(this).val() != "") {
                 $(this).css('color', '#333');
          }else{
                 $(this).css('color', 'transparent');
          }
     });
})
input[type="file"]{
    color: transparent;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="file" name="app_cvupload" class="fullwidth input rqd">


Це працює дуже ефективно, приховуючи текст біля введення файлу.
завжди

6

Але якщо ви спробуєте видалити цю підказку

<input type='file' title=""/>

Це не працює. Ось мій маленький фокус, щоб це зробити, спробуйте заголовок з пробілом. Це спрацює. :)

<input type='file' title=" "/>

Я тестував у chrome та у всіх браузерах. Це працює нормально. Не могли б ви протестувати та перевірити.
simon

4
Знову тестується в Chrome, Safari, Firefox. Вона не працює.
AdamInTheOculus

Я перевіряю у версії chrome 56.0.2924.87, що він працює чудово. Яку версію ви використовуєте? @PantsMagee
simon

Він просто додає підказку з текстом, який ви встановили за titleатрибутом, як я бачу
Федір,


3

HTML

  <div class="fileUpload btn btn-primary">
    <label class="upload">
      <input name='Image' type="file"/>
    Upload Image
    </label>
  </div>

CSS

input[type="file"]
{
  display: none;
}
.fileUpload input.upload 
{
    display: inline-block;
}

Примітка: Btn btn-primary - це клас кнопки завантаження. Однак кнопка може виглядати втомленою в положенні. Сподіваюся, ви можете це виправити за допомогою вбудованого css.


3
 .vendor_logo_hide{
      display: inline !important;;
      color: transparent;
      width: 99px;
    }
    .vendor_logo{
      display: block !important;
      color: black;
      width: 100%; 
    }

$(document).ready(function() {
  // set text to select company logo 
  $("#Uploadfile").after("<span class='file_placeholder'>Select Company Logo</span>");
  // on change
  $('#Uploadfile').change(function() {
    //  show file name 
    if ($("#Uploadfile").val().length > 0) {
      $(".file_placeholder").empty();
      $('#Uploadfile').removeClass('vendor_logo_hide').addClass('vendor_logo');
      console.log($("#Uploadfile").val());
    } else {
      // show select company logo
      $('#Uploadfile').removeClass('vendor_logo').addClass('vendor_logo_hide');
      $("#Uploadfile").after("<span class='file_placeholder'>Select  Company Logo</span>");
    }

  });

});
.vendor_logo_hide {
  display: inline !important;
  ;
  color: transparent;
  width: 99px;
}

.vendor_logo {
  display: block !important;
  color: black;
  width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="file" class="vendor_logo_hide" name="v_logo" id='Uploadfile'>
<span class="fa fa-picture-o form-control-feedback"></span>

<div>
  <p>Here defualt no choose file is set to select company logo. if File is selected then it will displays file name</p>
</div>


Як отримати текст "Вибрати логотип компанії" для відображення під кнопкою, а не з правого боку ??
alex

3

за допомогою мітки із зміненим текстом мітки

<input type="file" id="files" name="files" class="hidden"/>
<label for="files" id="lable_file">Select file</label>

додати jquery

<script>
     $("#files").change(function(){
        $("#lable_file").html($(this).val().split("\\").splice(-1,1)[0] || "Select file");     
     });
</script>

2

Просто змініть ширину вводу. Близько 90 пікселів

<input type="file" style="width: 90px" />


1
Це просто і чудово працює. Просто ширина - 100 пікселів; :)
Сачин Шах

1
<div class="field">
    <label class="field-label" for="photo">Your photo</label>
    <input class="field-input" type="file" name="photo"  id="photo" value="photo" />
</div>

та css

input[type="file"]
{ 
   color: transparent; 
   background-color: #F89406; 
   border: 2px solid #34495e; 
   width: 100%; 
   height: 36px; 
   border-radius: 3px; 
}

1
введення [type = "file"] {color: прозорий; фон-колір: # F89406; межа: 2px суцільний # 34495e; ширина: 100%; висота: 36px; межа-радіус: 3 пікселі; }
Ir Calif

1

Ви можете спробувати це таким чином:

<div>
    <label for="user_audio" class="customform-control">Browse Computer</label>
    <input type='file' placeholder="Browse computer" id="user_audio"> <span id='val'></span>
 <span id='button'>Select File</span>
</div>

Щоб показати вибраний файл:

$('#button').click(function () {
    $("input[type='file']").trigger('click');
})

$("input[type='file']").change(function () {
    $('#val').text(this.value.replace(/C:\\fakepath\\/i, ''))
    $('.customform-control').hide();
})

Дякуємо @ unlucky13 за отримання вибраного імені файлу

Ось робоча скрипка:

http://jsfiddle.net/eamrmoc7/


0

Це допоможе вам змінити назву на "жоден файл не вибрати, щоб вибрати зображення профілю"

<input type='file'id="files" class="hidden"/>  
<label for="files">Select profile picture</label>

кнопка зникла.
Diansheng

це спрацювало для мене дуже добре. Кнопки не було, але натиснувши діалогове вікно відкриття файлів відкритих міток, ви можете створити стиль мітки, щоб вона виглядала як кнопка. Він позбувся докучливого тексту "Файл не вибраний".
NoBullMan

0

Я б використовував "кнопку" замість "мітка", сподіваюся, це комусь допоможе.

Тут просто відображатиметься кнопка, натиснута користувачем, спливаюче меню вибору файлів, після вибору файлу, автоматично завантажується.

<button onclick='<%= "$(\"#" + FileUpload1.ClientID + "\").click(); return false;" %>'>The Text You Want</button>

<asp:FileUpload onchange="$('#btnUpload').click();" ID="FileUpload1" runat="server" style="display: none;" />

<asp:Button ID="btnUpload" ClientIDMode="Static" runat="server" OnClick="btnUpload_Click" style="display: none;" />

0

Ви можете використовувати наступний css-код, щоб приховати (файл не вибрано)

HTML

<input type="file" name="page_logo" id="page_logo">

CSS

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

ПЕРЕКОНАЙТЕСЯ, ЩО КОЛІР ВІДПОВІДАЄ ФОНУ


-1

Є хороший приклад (який включає перевірку типу файлу) за адресою:

https://github.com/mdn/learning-area/blob/master/html/forms/file-examples/file-example.html

В основному це ідеальна версія ідеї Амоса про використання кнопки.

Я спробував кілька наведених вище пропозицій без успіху (але, можливо, це я).

Я перепризначую його для перетворення файлів Excel за допомогою

  <form>
    <div>
      <label for="excel_converts">Choose a spreadsheet to convert.</label>
      <input type="file" id="excel_converts" name="excel_converts" accept=".xlsx, .xls, .csv" >
    </div>
    <div class="preview">
      <p>No spreadsheet currently selected for conversion</p>
    </div>
    <div>
      <button>Submit</button>
    </div>
  </form>

Тож це було проти: чому? Можливо, тому, що в абсолютно не пов'язаному дописі я припустив, що легко зробити прихильність до колін, але набагато менш легко бути спонтанним?
DLyons,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.