Como posso remover a dica de ferramenta “Nenhum arquivo escolhido” de uma entrada de arquivo no Chrome?

86

Gostaria de remover a dica de ferramenta "Nenhum arquivo escolhido" de uma entrada de arquivo no Google Chrome (vejo que nenhuma dica de ferramenta é exibida no Firefox).

Observe que não estou falando sobre o texto dentro do campo de entrada, mas sobre a dica de ferramenta que aparece quando você move o mouse sobre a entrada.

Eu tentei isso sem sorte:

$('#myFileInput').attr('title', '');
Latorre alemão
fonte
1
Talvez tente adicionar espaço no valor do atributo: attr ('title', ''). A dica ainda estará visível, mas com conteúdo vazio.
chora
1
verifique minha resposta. use 'título': 'espaço'
simon
Talvez esta resposta possa ajudá-lo. stackoverflow.com/a/25825731/1323461
LCB

Respostas:

61

Esta é uma parte nativa dos navegadores do webkit e você não pode removê-la. Você deve pensar em uma solução hacky, como cobrir ou ocultar as entradas do arquivo.

Uma solução 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, ''))
})    

Violino

Indefinido
fonte
Uau, isso é uma má notícia ... Existe alguma documentação disponível que mencione esse problema (quero dizer, o fato de que você não pode remover essa dica)?
German Latorre de
2
A dica de ferramenta ainda é exibida quando você passa o mouse sobre a borda inferior da entrada. "Opacidade: 0" não resolve o problema.
Webars
1
@Webars eu mencionei hacky, não à prova de bala.
indefinido em
7
@NisanthSojan Então melhore, foi apenas um exemplo.
indefinido
1
Um dos hack mais limpos que já vi. Esperamos que funcione em todos os navegadores como IE9 +, FF, Safari. Funciona perfeitamente no Chrome.
Pawan Pillai
60

A dica de ferramenta padrão pode ser editada usando o atributo title

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

Mas se você tentar remover esta dica de ferramenta

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

Isso não vai funcionar. Aqui está meu pequeno truque para resolver isso, tente o título com um espaço. Vai funcionar.:)

<input type='file' title=" "/>
simon
fonte
Funciona no Chromium versão 44.0.2403.89 e não tem efeitos colaterais na versão 40.0.3! Excelente entrada @simon
Robert Siemer
mas seu título personalizado aparecerá mesmo depois de escolher os arquivos.
Monicka
Eu integrei esta solução com um mecanismo de ligação (aureliajs, angular, ...) e isso funciona muito bem para computar a mensagem adequada e mostrar ao usuário.
ConductedClever
57

Para mim, eu só queria que o texto ficasse invisível e ainda usasse o botão nativo do navegador.

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

Eu gosto de todas as sugestões de undefined, mas eu tinha um caso de uso diferente, espero que isso ajude alguém na mesma situação.

Dwayne Forde
fonte
2
Não tirou o "arquivo não escolhido" para mim.
MEM
6
isso elimina o "arquivo não escolhido" para mim
Brian
@MEM, em qual navegador você está? Isso está funcionando para mim no Chrome (com algumas modificações porque não quero apenas que o texto desapareça).
Brilliand
Esta é a melhor resposta para 2020. Definir a opacidade como 0 torna todo o elemento invisível.
Xenalin
12

Eu encontrei uma solução que é muito fácil, basta definir uma string vazia no atributo title.

<input type="file" value="" title=" " />
JNTN B77
fonte
2
Você deve apenas fazer title = "" caso contrário title = "" mostra uma dica de ferramenta em branco.
ufukomer
9

Você pode desativar a dica de ferramenta definindo um título com um espaço em navegadores webkit como o Chrome e uma string vazia no Firefox ou IE (testado no Chrome 35, FF 29, IE 11, safari mobile)

$('input[type="file"]').attr('title', window.webkitURL ? ' ' : '');
Jbier
fonte
Obrigado pela edição. Gostaria de encontrar uma solução sem wedkitURL porque está obsoleto.
jbier
Esta resposta é a única que funcionou para mim, apenas substituiu a detecção do navegador pela fornecida em stackoverflow.com/questions/9847580/…
yvesmancera
9

Muito fácil, esqueça o CSS visando a coisa de entrada ["tipo"], não funciona para mim. Não sei por quê. Eu tenho minha solução na minha tag HTML

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

Fim do problema

Lawel
fonte
5

Todas as respostas aqui são totalmente complicadas ou totalmente erradas.

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/

Eu criei este violino, da maneira mais simplista. Clicar no botão Selecionar arquivo abrirá o menu de seleção de arquivo. Você pode estilizar o botão da maneira que desejar. Basicamente, tudo o que você precisa fazer é ocultar a entrada do arquivo e acionar um clique sintético nele ao clicar em outro botão. Eu testei isso no IE 9, FF e Chrome, e todos eles funcionam bem.

LadyCailin
fonte
5

Este funciona para mim (pelo menos no Chrome e Firefox):

<input type="file" accept="image/*" title="&nbsp;"/>
Андрей Куценко
fonte
A caixa do título (contendo o caractere de espaço sem quebra) ainda aparece, no entanto.
2540625
A caixa de título aparece para mim com uma string vazia no cromo.
AshD
4

Este é complicado. Não consegui encontrar uma maneira de selecionar o elemento 'nenhum arquivo escolhido', então criei uma máscara usando o pseudo seletor: after.

Minha solução também requer o uso do seguinte pseudo seletor para estilizar o botão:

::-webkit-file-upload-button

Experimente: http://jsfiddle.net/J8Wfx/1/

FYI: Isso só funcionará em navegadores webkit.

PS: se alguém souber como visualizar os pseudo seletores do webkit como o acima no inspetor do webkit, por favor me avise

Jameswakefield
fonte
Não funcionou para mim no Chrome (o próprio violino mostra a dica de ferramenta sem arquivo escolhido)
AshD
4

Em todos os navegadores e simples. isso fez por mim

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

Ifeanyi Chukwu
fonte
Esta é uma otima soluçao ! funcionou muito bem para mim porque depois de fazer o upload do arquivo, o nome do arquivo seria mostrado. bom e obrigado!
como isso é remover a dica de ferramenta? Eu ainda vejo
The Fool
3

Você precisará personalizar bastante o controle para conseguir isso.

Siga o guia em: http://www.quirksmode.org/dom/inputfile.html

Ryan McDonough
fonte
1
Eu ia postar isso, além de que há um plugin JQuery que faz algo parecido com filamentgroup.com/lab/…
Dreen
1
@RyanMcDonough, não consigo ver nenhuma dica sobre como ocultar a dica de ferramenta no link que você forneceu, está faltando alguma coisa?
German Latorre de
Desculpas, eu deveria ter esclarecido. Como não há como ocultar essa dica de ferramenta, você precisará personalizar o controle do formulário de entrada para obter um resultado semelhante. Em certo sentido, hackear o controle original.
Ryan McDonough de
@Dreen, posso ver a dica de ferramenta "Nenhum arquivo escolhido" no link que você forneceu também, isso não resolve o problema ...
German Latorre
3

Enrole com e torne o invisível. Trabalhe no Chrome, Safari && FF.

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

Vovchisko
fonte
2

É melhor evitar o uso de javascript desnecessário. Você pode aproveitar as vantagens da etiqueta de rótulo para expandir o destino de clique da entrada, como:

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

Mesmo que a entrada esteja oculta, o link ainda funciona como um alvo de clique para ele e você pode estilizá-lo como quiser.

Tempo
fonte
2

Mesmo que você defina a opacidade como zero, a dica de ferramenta aparecerá. Experimente visibility:hiddeno elemento. Está funcionando para mim.

Raa Vijay
fonte
2

Funciona para mim!

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

Então, você pode usar diferentes tipos de estilos como width, heightou outras propriedades, a fim de criar o seu próprio arquivo de entrada.

Slorenzo
fonte
1

Diretamente, você não pode modificar muito sobre a entrada [type = file].

Torne a opacidade do arquivo do tipo de entrada: 0 e tente colocar um elemento relativo [div / span / botão] sobre ele com CSS personalizado

Experimente http://jsfiddle.net/gajjuthechamp/pvyVZ/8/

Campeão
fonte
1

Surpresa ao ver ninguém mencionado sobre event.preventDefault()

$("input[type=file]").mouseover(function(event) {
    event.preventDefault();
    // This will disable the default behavior of browser
 });
Kenny
fonte
0

você pode definir uma largura para seu elemento, que mostrará apenas o botão e ocultará o "arquivo não escolhido".

Sotiris
fonte
0

Procuro uma boa resposta para isto ... e encontrei isto:

Primeiro exclua o 'nenhum arquivo escolhido'

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

em seguida, pressione o botão com o -webkit-file-upload-button, desta forma:

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

espero que seja isso que você estava procurando, funciona para mim.

devash23
fonte
0

Combinando algumas das sugestões acima, usando jQuery, aqui está o que fiz:

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

E:

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

E coloque a classe "não utilizada" em suas entradas de arquivo. Isso é simples e funciona muito bem.

Auxiliar de Dados
fonte
0

A melhor solução, para mim, é envolver input [type = "file"] em um wrapper e adicionar algum código 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>

Alex Black
fonte
0

Eu vim com uma solução hacky que remove totalmente "Nenhum arquivo escolhido" mais o espaço extra que é adicionado após esse texto (no Chrome eu recebo algo como: "Nenhum arquivo escolhido").

Isso estava bagunçando totalmente o alinhamento da minha página, então eu realmente lutei com isso para encontrar uma solução. Dentro do atributo de estilo da tag de entrada, definir "largura" para a largura do botão eliminará o texto e os espaços finais. Uma vez que a largura do botão não é a mesma em todos os navegadores (é um pouco menor no Firefox, por exemplo), você também deseja definir a cor do estilo para a mesma cor do fundo da página (caso contrário, um " Não "pode ​​aparecer). Minha tag de arquivo de entrada tem a seguinte aparência:

<input style="float:left; **width:88px;** **color:#000000;**" type="file" id="fileInput" onclick="fileOpen()">    
TonyLuigiC
fonte
Eu não vi a solução abaixo até agora, pois ela estava até o final da página. Em qualquer caso, não irei deletar minha solução, pois espero que as informações de cores de estilo sejam úteis (resolveram o problema do Firefox para mim).
TonyLuigiC
0

Eu sei que é um pouco hack, mas tudo que eu precisava era definir a cor como transparente na folha de estilo - inline ficaria assim estilo = "color: transparent;".

tgibbons
fonte