¿Cómo puedo eliminar la información sobre herramientas "Ningún archivo elegido" de una entrada de archivo en Chrome?

85

Me gustaría eliminar la información sobre herramientas "Ningún archivo elegido" de una entrada de archivo en Google Chrome (veo que no se muestra información sobre herramientas en Firefox).

Tenga en cuenta que no estoy hablando del texto dentro del campo de entrada, sino de la información sobre herramientas que aparece cuando mueve el mouse sobre la entrada.

Intenté esto sin suerte:

$('#myFileInput').attr('title', '');
Alemán Latorre
fuente
1
Tal vez intente agregar espacio en el valor del atributo: attr ('título', ''). La información sobre herramientas seguirá estando visible, pero con contenido vacío.
Cryss
1
revisa mi respuesta. use 'title': 'space'
simon
Quizás esta respuesta pueda ayudarte. stackoverflow.com/a/25825731/1323461
LCB

Respuestas:

61

Esta es una parte nativa de los navegadores webkit y no puede eliminarla. Debería pensar en una solución pirata como cubrir u ocultar las entradas del archivo.

Una solución 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, ''))
})    

Violín

indefinido
fuente
Vaya, eso es una mala noticia ... ¿Hay alguna documentación disponible que mencione este problema (quiero decir, el hecho de que no puede eliminar esa información sobre herramientas)?
German Latorre
2
La información sobre herramientas aún se muestra cuando se desplaza sobre el borde inferior de la entrada. "Opacidad: 0" no resuelve el problema.
Webars
1
@Webars He mencionado hacky, no a prueba de balas.
indefinido
7
@NisanthSojan Así que hazlo mejor, fue solo un ejemplo.
indefinido
1
Uno de los trucos más limpios que he visto. Con suerte, funcionará en todos los navegadores como IE9 +, FF, Safari. Funciona perfectamente en Chrome.
Pawan Pillai
59

La información sobre herramientas predeterminada se puede editar mediante el atributo de título

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

Pero si intenta eliminar esta información sobre herramientas

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

Esto no funcionará. Aquí está mi pequeño truco para trabajar esto, pruebe el título con un espacio. Funcionará.:)

<input type='file' title=" "/>
Simón
fuente
¡Funciona en la versión 44.0.2403.89 de Chromium y no tiene efectos secundarios en la versión 40.0.3! Gran entrada @simon
Robert Siemer
pero su título personalizado aparecerá incluso después de elegir los archivos.
Monicka
He integrado esta solución con un motor de enlace (aureliajs, angular, ...) y esto funciona muy, muy bien para calcular el mensaje adecuado y mostrarlo al usuario.
ConductedClever
58

Para mí, solo quería que el texto fuera invisible y aún usara el botón del navegador nativo.

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

Me gustan todas las sugerencias de undefined, pero tuve un caso de uso diferente, espero que esto ayude a alguien en la misma situación.

Dwayne Forde
fuente
2
No me quitó el "archivo no elegido".
MEM
6
esto elimina el "archivo no elegido" para mí
Brian
@MEM, ¿en qué navegador estás? Esto me funciona en Chrome (con algunas modificaciones porque no solo quiero que el texto desaparezca).
Brilliand
Esta es la mejor respuesta para 2020. Establecer la opacidad en 0 hace que todo el elemento sea invisible.
Xenalin
12

Encontré una solución que es muy fácil, simplemente establezca una cadena vacía en el atributo de título.

<input type="file" value="" title=" " />
JNTN B77
fuente
2
Debería hacer que title = "" de lo contrario title = "" muestra una información sobre herramientas en blanco.
ufukomer
9

Puede deshabilitar la información sobre herramientas configurando un título con un espacio en navegadores webkit como Chrome y una cadena vacía en Firefox o IE (probado en Chrome 35, FF 29, IE 11, safari mobile)

$('input[type="file"]').attr('title', window.webkitURL ? ' ' : '');
jbier
fuente
Gracias por editar. Me gustaría encontrar una solución sin wedkitURL porque está obsoleta.
jbier
Esta respuesta es la única que funcionó para mí, simplemente reemplazó la detección del navegador por la proporcionada en stackoverflow.com/questions/9847580/…
yvesmancera
8

Muy fácil, olvídate de CSS apuntando a la entrada ["tipo"], no funciona para mí. No sé por qué. Tengo mi solución en mi etiqueta HTML

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

Fin del problema

Lawel
fuente
5

Todas las respuestas aquí son totalmente complicadas o simplemente totalmente incorrectas.

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/

Creé este violín, de la manera más simplista. Al hacer clic en el botón Seleccionar archivo, aparecerá el menú de selección de archivo. A continuación, puede estilizar el botón de la forma que desee. Básicamente, todo lo que necesita hacer es ocultar la entrada del archivo y activar un clic sintético cuando haga clic en otro botón. Probé esto en IE 9, FF y Chrome, y todos funcionan bien.

LadyCailin
fuente
5

Este me funciona (al menos en Chrome y Firefox):

<input type="file" accept="image/*" title="&nbsp;"/>
Андрей Куценко
fuente
Sin embargo, el cuadro del título (que contiene el carácter de espacio que no se separa) sigue apareciendo.
2540625
El cuadro de título aparece para mí con una cadena vacía en Chrome.
AshD
4

Este es complicado. No pude encontrar una manera de seleccionar el elemento 'sin archivo elegido', así que creé una máscara usando el pseudo selector: after.

Mi solución también requiere el uso del siguiente pseudo selector para diseñar el botón:

::-webkit-file-upload-button

Pruebe esto: http://jsfiddle.net/J8Wfx/1/

FYI: Esto solo funcionará en navegadores webkit.

PD: si alguien sabe cómo ver pseudo selectores de webkit como el anterior en el inspector de webkit, hágamelo saber

jameswakefield
fuente
No funcionó para mí en Chrome (el violín en sí muestra la información sobre herramientas sin archivo elegido)
AshD
4

En todos los navegadores y simple. esto lo hizo por mi

$(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
fuente
esta es una gran solución! funcionó muy bien para mí porque después de cargar el archivo, se mostraría el nombre del archivo. agradable y gracias!
¿Cómo se elimina la información sobre herramientas? Todavía lo veo
The Fool
3

Necesitará personalizar bastante el control para lograr esto.

Siga la guía en: http://www.quirksmode.org/dom/inputfile.html

Ryan McDonough
fuente
1
Iba a publicar esto, además de que hay un complemento de JQuery que hace algo similar filamentgroup.com/lab/…
Dreen
1
@RyanMcDonough, no puedo ver ningún consejo sobre cómo ocultar la información sobre herramientas en el enlace que proporcionó, ¿hay algo que me esté perdiendo?
German Latorre
Disculpas, debería haberlo aclarado. Como no hay forma de ocultar esa información sobre herramientas, deberá personalizar el control del formulario de entrada para lograr un resultado similar. En cierto sentido, pirateando el control original.
Ryan McDonough
@Dreen, puedo ver la información sobre herramientas "No se eligió un archivo" en el enlace que proporcionó, no resuelve el problema ...
German Latorre
3

Envuelva y haga invisible. Trabaja en Chrome, Safari && FF.

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

vovchisko
fuente
2

Es mejor evitar el uso de javascript innecesario. Puede aprovechar la etiqueta de etiqueta para expandir el destino de clic de la entrada de la siguiente manera:

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

A pesar de que la entrada está oculta, el vínculo sigue funcionando como destino de clic para él y puede diseñarlo como desee.

Hora
fuente
2

Incluso si establece la opacidad en cero, aparecerá la información sobre herramientas. Pruébate visibility:hiddenel elemento. Me está funcionando.

Raa Vijay
fuente
1

Directamente, no puede modificar mucho sobre la entrada [tipo = archivo].

Haga que el archivo de tipo de entrada sea opacidad: 0 e intente colocar un elemento relativo [div / span / button] sobre él con CSS personalizado

Prueba esto http://jsfiddle.net/gajjuthechamp/pvyVZ/8/

Morder
fuente
1

¡Esto funciona para mi!

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

Luego, puede usar diferentes tipos de estilos como width, heightu otras propiedades, para crear su propio archivo de entrada.

slorenzo
fuente
1

Sorpresa de ver a nadie mencionado event.preventDefault()

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

puede establecer un ancho para su elemento que mostrará solo el botón y ocultará el "archivo no elegido".

Sotiris
fuente
0

Busco una buena respuesta para esto ... y encontré esto:

Primero elimine el 'archivo no elegido'

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

luego trabaje el botón con el -webkit-file-upload-button, de esta manera:

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

Espero que esto sea lo que buscabas, me funciona.

devash23
fuente
0

Combinando algunas de las sugerencias anteriores, usando jQuery, esto es lo que hice:

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

Y:

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

Y ponga la clase "sin usar" en las entradas de su archivo. Esto es simple y funciona bastante bien.

Asistente de datos
fuente
0

La mejor solución, para mí, es envolver input [type = "file"] en un contenedor y agregar algo de 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 negro
fuente
0

Se me ocurrió una solución hacky que elimina totalmente "Ningún archivo elegido" más el espacio extra que se agrega después de ese texto (en Chrome obtengo algo como: "Ningún archivo elegido").

Esto estaba arruinando totalmente la alineación de mi página, así que realmente luché con eso para encontrar una solución. Dentro del atributo de estilo de la etiqueta de entrada, establecer "ancho" en el ancho del botón eliminará el texto final y los espacios. Dado que el ancho del botón no es el mismo en todos los navegadores (es un poco más pequeño en Firefox, por ejemplo), también querrá establecer el color del estilo en el mismo color que el fondo de la página (de lo contrario, un parásito " No "puede aparecer). Mi etiqueta de archivo de entrada se ve así:

<input style="float:left; **width:88px;** **color:#000000;**" type="file" id="fileInput" onclick="fileOpen()">    
TonyLuigiC
fuente
No vi la solución a continuación hasta ahora, ya que estaba muy abajo en la página. En cualquier caso, no voy a eliminar mi solución, ya que espero que la información de color de estilo sea útil (resolvió el problema de Firefox para mí).
TonyLuigiC
0

Sé que es un truco, pero todo lo que necesitaba era establecer el color en transparente en la hoja de estilo; en línea se vería así style = "color: transparent;".

tgibbons
fuente