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

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


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=" "/>

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.


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=" " />

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 ? ' ' : '');

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


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.


5

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

<input type="file" accept="image/*" title="&nbsp;"/>

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


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


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


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>


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.


2

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


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.



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/


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

0

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


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.


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.


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>


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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.