Как удалить всплывающую подсказку «Файл не выбран» из ввода файла в Chrome?

86

Я хочу удалить всплывающую подсказку «Файл не выбран» из ввода файла в Google Chrome (я вижу, что всплывающая подсказка не отображается в Firefox).

Обратите внимание, что я говорю не о тексте внутри поля ввода, а о всплывающей подсказке, которая появляется при наведении курсора мыши на поле ввода.

Я пробовал это без везения:

$('#myFileInput').attr('title', '');
Немецкий Latorre
источник
1
Может быть, попробуйте добавить пробел в значение атрибута: attr ('title', ''). Всплывающая подсказка по-прежнему будет видна, но с пустым содержимым.
cryss
1
проверьте мой ответ. используйте 'title': 'space'
Саймон
Возможно, этот ответ может вам помочь. stackoverflow.com/a/25825731/1323461
LCB

Ответы:

61

Это встроенная часть браузеров webkit, и вы не можете ее удалить. Вы должны думать о Hacky решение , как покрытие или скрывая входы файлов.

Hacky решение:

input[type='file'] {
  opacity:0    
}

<div>
    <input type='file'/>
    <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, ''))
})    

Скрипка

неопределенный
источник
Вау, это плохие новости ... Имеется ли какая-либо документация, в которой упоминается эта проблема (я имею в виду, факт, что вы не можете удалить эту подсказку)?
German Latorre
2
Всплывающая подсказка по-прежнему отображается при наведении курсора на нижний край поля ввода. «Непрозрачность: 0» не решает проблему.
Webars
1
@Webars Я упомянул хакерский, а не пуленепробиваемый.
undefined
7
@NisanthSojan Так что сделай это лучше, это был просто пример.
undefined
1
Один из самых чистых хаков, которые я когда-либо видел. Надеюсь, он будет работать во всех браузерах, таких как IE9 +, FF, Safari. Отлично работает в Chrome.
Паван Пиллай,
60

Всплывающую подсказку по умолчанию можно редактировать с помощью атрибута title

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

Но если вы попытаетесь удалить эту подсказку

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

Это не сработает. Вот мой маленький трюк, чтобы поработать с этим, попробуйте заголовок с пробелом. Это сработает.:)

<input type='file' title=" "/>
Саймон
источник
Работает в Chromium версии 44.0.2403.89 и не имеет побочных эффектов в версии 40.0.3! Отличный вклад @simon
Роберт Симер
но ваш собственный заголовок будет отображаться даже после выбора файлов.
Monicka
Я интегрировал это решение с механизмом привязки (aureliajs, angular, ...), и это очень хорошо работает, чтобы вычислить правильное сообщение и показать пользователю.
ConductedClever
57

Для меня я просто хотел, чтобы текст был невидимым и по-прежнему использовал кнопку встроенного браузера.

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

Мне нравятся все предложения undefined, но у меня был другой вариант использования, надеюсь, это поможет кому-то в той же ситуации.

Дуэйн Форд
источник
2
Не убрали для меня "файл не выбран".
MEM
6
для меня это избавляет от «не выбран файл»
Брайан
@MEM, в каком вы браузере? Это работает для меня в Chrome (с некоторыми изменениями, потому что я не хочу, чтобы текст просто исчезал).
Brilliand
Это лучший ответ на 2020 год. Установка непрозрачности на 0 делает невидимым весь элемент.
Xenalin
12

Я нашел решение, которое очень простое, просто введите пустую строку в атрибут title.

<input type="file" value="" title=" " />
JNTN B77
источник
2
Вы должны просто сделать title = "" иначе title = "" покажет пустую подсказку.
ufukomer 03
9

Вы можете отключить всплывающую подсказку, задав заголовок с пробелом в браузерах webkit, таких как Chrome, и пустой строкой в ​​Firefox или IE (проверено в Chrome 35, FF 29, IE 11, safari mobile)

$('input[type="file"]').attr('title', window.webkitURL ? ' ' : '');
jbier
источник
Спасибо за редактирование. Я хотел бы найти решение без wedkitURL, потому что он устарел.
jbier
Этот ответ единственный, который сработал для меня, просто заменил обнаружение браузера на тот, который предоставлен в stackoverflow.com/questions/9847580/…
yvesmancera
9

Очень просто, забудьте, что CSS нацелен на input ["type"], это не работает для меня. Не знаю почему. Я нашел свое решение в своем HTML-теге

<input type="file" style="color:transparent; width:70px;"/>

Конец проблемы

Лавель
источник
5

Все ответы здесь либо слишком усложнены, либо совершенно неверны.

html:

<div>
    <input type="file" />
    <button>Select File</button>
</div>

css:

input {
    display: none;
}

javascript:

$('button').on('click', function(){
   $('input').trigger('click'); 
});

http://jsfiddle.net/odfe34n8/

Я создал эту скрипку самым простым способом. При нажатии на кнопку «Выбрать файл» открывается меню выбора файла. Затем вы можете стилизовать кнопку так, как хотите. По сути, все, что вам нужно сделать, это скрыть ввод файла и вызвать синтетический щелчок по нему, когда вы нажмете другую кнопку. Я проверил это на IE 9, FF и Chrome, и все они работают нормально.

LadyCailin
источник
5

Это работает для меня (по крайней мере, в Chrome и Firefox):

<input type="file" accept="image/*" title="&nbsp;"/>
Андрей Куценко
источник
Однако поле заголовка (содержащее неразрывный пробел) по-прежнему отображается.
2540625
Поле заголовка отображается для меня с пустой строкой на хроме.
AshD
4

Это непростой вопрос. Мне не удалось найти способ выбрать элемент «файл не выбран», поэтому я создал маску, используя псевдоселектор: after.

Мое решение также требует использования следующего псевдоселектора для стилизации кнопки:

::-webkit-file-upload-button

Попробуйте это: http://jsfiddle.net/J8Wfx/1/

К вашему сведению: это будет работать только в браузерах webkit.

PS, если кто-нибудь знает, как просматривать псевдоселекторы webkit, подобные приведенному выше, в инспекторе webkit, дайте мне знать

Джеймсвейкфилд
источник
Не сработало у меня на Chrome (сама скрипка показывает всплывающую подсказку без выбранного файла)
AshD
4

Во всех браузерах и просто. это сделало это для меня

$(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">

Ифеани Чукву
источник
это отличное решение! это отлично сработало для меня, потому что после загрузки файла имя файла будет отображаться. приятно и спасибо!
как это удалить всплывающую подсказку? Я до сих пор это вижу
Дурак
3

Для этого вам нужно будет довольно много настроить элемент управления.

Следуйте инструкциям на странице http://www.quirksmode.org/dom/inputfile.html.

Райан МакДонаф
источник
1
Я собирался опубликовать это, плюс есть плагин JQuery, который делает что-то похожее filamentgroup.com/lab/…
Дрин
1
@RyanMcDonough, я не вижу советов по скрытию всплывающей подсказки в предоставленной вами ссылке, что-то мне не хватает?
German Latorre
Извините, я должен пояснить. Поскольку нет способа скрыть эту подсказку, вам нужно будет настроить элемент управления формой ввода для достижения аналогичного результата. В некотором смысле взлом исходного элемента управления.
Райан МакДонаф,
@Dreen, я также вижу всплывающую подсказку «Файл не выбран» в предоставленной вами ссылке, это не решает проблему ...
German Latorre
3

Оберните и сделайте невидимкой. Работайте в Chrome, Safari && FF.

label { 
  padding: 5px;
  background: silver;
}
label > input[type=file] {
    display: none;
}
<label>
  <input type="file">
  select file
</label>

вовчиско
источник
2

Лучше избегать использования ненужного javascript. Вы можете воспользоваться тегом label, чтобы развернуть целевой объект ввода, например:

<label>
  <input type="file" style="display: none;">
  <a>Open</a>
</label>

Несмотря на то, что ввод скрыт, ссылка по-прежнему работает для нее как цель щелчка, и вы можете стилизовать ее, как хотите.

Время
источник
2

Даже если вы установили непрозрачность на ноль, всплывающая подсказка появится. Примерьте visibility:hiddenстихию. У меня это работает.

Раа Виджай
источник
2

Меня устраивает!

input[type="file"]{
  font-size: 0px;
}

Затем вы можете использовать разные стили, такие как width, heightили другие свойства, чтобы создать свой собственный входной файл.

Slorenzo
источник
1

Непосредственно вы не можете сильно изменить input [type = file].

Сделайте непрозрачность файла входного типа: 0 и попробуйте разместить над ним относительный элемент [div / span / button] с помощью настраиваемого CSS.

Попробуйте это http://jsfiddle.net/gajjuthechamp/pvyVZ/8/

Чемпион
источник
1

Удивительно, что никто не упомянул о event.preventDefault()

$("input[type=file]").mouseover(function(event) {
    event.preventDefault();
    // This will disable the default behavior of browser
 });
Кенни
источник
0

вы можете установить ширину для элемента yor, при котором будет отображаться только кнопка и скрываться «файл не выбран».

Сотирис
источник
0

Я ищу на это хороший ответ ... и нашел вот что:

Сначала удалите "файл не выбран"

input[type="file"]{
font-size: 0px;
}

затем работайте с кнопкой -webkit-file-upload-buttonследующим образом:

input[type="file"]::-webkit-file-input-button{
font-size: 16px; /*normal size*/
}

надеюсь, это то, что вы искали, это работает для меня.

дэваш23
источник
0

Объединив некоторые из приведенных выше предложений, используя jQuery, я сделал следующее:

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

И:

$(function() {
  $("input[type='file'].unused").click( function() {$(this).removeClass('unused')});
};

И поместите класс «неиспользуемый» на входные данные файла. Это просто и работает очень хорошо.

Data Helper
источник
0

Лучшее решение для меня - обернуть input [type = "file"] в оболочку и добавить код jquery:

$(function(){
	function readURL(input){
        if (input.files && input.files[0]){
            var reader = new FileReader();
            
            reader.onload = function (e){
                $('#uploadImage').attr('src', e.target.result);
            }
            reader.readAsDataURL(input.files[0]);
        }
    }
    $("#image").change(function(){
        readURL(this);
    });
});
#image{
	position: absolute;
	top: 0;
	left: 0;
	opacity: 0;
	width: 75px;
	height: 35px;
}
#uploadImage{
	position: relative;
	top: 30px;
	left: 70px;
}
.button{
	position: relative;
	width: 75px;
	height: 35px;
	border: 1px solid #000;
	border-radius: 5px;
	font-size: 1.5em;
	text-align: center;
	line-height: 34px;
}
<form action="#" method="post" id="form" >
	<div class="button">
		Upload<input type="file" id="image" />
     </div>
     <img id="uploadImage" src="#" alt="your image" width="350" height="300" />
 </form>

Алекс Блэк
источник
0

Я придумал хакерское решение, которое полностью удаляет «Файл не выбран» плюс дополнительное пространство, добавляемое после этого текста (в Chrome я получаю что-то вроде: «Файл не выбран»).

Это полностью нарушало выравнивание моей страницы, поэтому я действительно боролся с этим, чтобы найти решение. Внутри атрибута стиля входного тега установка «width» равной ширине кнопки устранит завершающий текст и пробелы. Поскольку ширина кнопки не одинакова во всех браузерах (например, в Firefox она немного меньше), вы также захотите установить цвет стиля на тот же цвет, что и фон страницы (в противном случае случайный " Нет "может просвечивать"). Мой тег входного файла выглядит так:

<input style="float:left; **width:88px;** **color:#000000;**" type="file" id="fileInput" onclick="fileOpen()">    
TonyLuigiC
источник
Я не видел нижеприведенного решения до сих пор, так как оно было так далеко на странице. В любом случае я не собираюсь удалять свое решение, так как, надеюсь, информация о цвете стиля будет полезна (это решило проблему Firefox для меня).
TonyLuigiC
0

Я знаю, что это своего рода хакерство, но все, что мне требовалось, - это установить прозрачный цвет в таблице стилей - встроенный будет выглядеть так: style = "color: transparent;".

гиббоны
источник