Come posso rimuovere la descrizione comando "Nessun file scelto" da un file immesso in Chrome?


86

Vorrei rimuovere il suggerimento "Nessun file scelto" da un file immesso in Google Chrome (vedo che non viene visualizzato alcun suggerimento in Firefox).

Si noti che non sto parlando del testo all'interno del campo di input, ma del suggerimento che appare quando si sposta il mouse sull'input.

L'ho provato senza fortuna:

$('#myFileInput').attr('title', '');

1
Forse prova ad aggiungere uno spazio nel valore dell'attributo: attr ('title', ''). La descrizione comando sarà ancora visibile, ma con contenuto vuoto.
cryss

1
controlla la mia risposta. usa 'titolo': 'spazio'
simon

Forse questa risposta può aiutarti. stackoverflow.com/a/25825731/1323461
LCB

Risposte:


61

Questa è una parte nativa dei browser webkit e non è possibile rimuoverla. Dovresti pensare a una soluzione hacker come coprire o nascondere gli input del file.

Una soluzione 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


Wow, questa è una brutta notizia ... C'è qualche documentazione disponibile che menziona questo problema (voglio dire, il fatto che non puoi rimuovere quel tooltip)?
German Latorre

2
Il suggerimento è ancora visualizzato quando si passa con il mouse sul bordo inferiore dell'input. "Opacità: 0" non risolve il problema.
Webars

1
@Webars ho menzionato hacky, non a prova di proiettile.
undefined

7
@NisanthSojan Quindi rendilo migliore, era solo un esempio.
undefined

1
Uno degli hack più puliti che abbia mai visto. Si spera che funzioni in tutti i browser come IE9 +, FF, Safari. Funziona perfettamente in Chrome.
Pawan Pillai

60

Il suggerimento predefinito può essere modificato utilizzando l'attributo title

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

Ma se provi a rimuovere questo suggerimento

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

Questo non funzionerà. Ecco il mio piccolo trucco per funzionare, prova il titolo con uno spazio. Funzionerà.:)

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

Funziona con la versione Chromium 44.0.2403.89 e non ha effetti collaterali nella versione 40.0.3! Ottimo input @simon
Robert Siemer

ma il tuo titolo personalizzato verrà visualizzato anche dopo aver scelto i file.
Monicka

Ho integrato questa soluzione con un motore di binding (aureliajs, angular, ...) e questo funziona molto bene per calcolare il messaggio corretto e mostrarlo all'utente.
ConductedClever

57

Per me, volevo solo che il testo fosse invisibile e continuassi a utilizzare il pulsante del browser nativo.

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

Mi piacciono tutti i suggerimenti di undefined ma ho avuto un caso d'uso diverso, spero che questo aiuti qualcuno nella stessa situazione.


2
Non ho portato via il "nessun file scelto" per me.
MEM

6
questo elimina il "nessun file scelto" per me
Brian

@MEM, che browser utilizzi? Questo funziona per me su Chrome (con alcune modifiche perché non voglio solo che il testo scompaia).
Brilliand

Questa è la risposta migliore per il 2020. L'impostazione dell'opacità su 0 rende l'intero elemento invisibile.
Xenalin

12

Ho trovato una soluzione molto semplice, basta impostare una stringa vuota nell'attributo title.

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

2
Dovresti solo fare title = "" altrimenti title = "" mostra un tooltip vuoto.
ufukomer

9

Puoi disabilitare la descrizione comando impostando un titolo con uno spazio sui browser webkit come Chrome e una stringa vuota su Firefox o IE (testato su Chrome 35, FF 29, IE 11, safari mobile)

$('input[type="file"]').attr('title', window.webkitURL ? ' ' : '');

Grazie per la modifica. Vorrei trovare una soluzione senza wedkitURL perché è deprecato.
jbier

Questa risposta è l'unico che ha funzionato per me, appena sostituito il rilevamento del browser a quella prevista in stackoverflow.com/questions/9847580/...
yvesmancera

9

Molto facile, dimentica il CSS che prende di mira la cosa di input ["type"], non funziona per me. Non so perché Ho la mia soluzione nel mio tag HTML

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

Fine del problema


5

Tutte le risposte qui sono totalmente complicate, o altrimenti semplicemente totalmente sbagliate.

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/

Ho creato questo violino, nel modo più semplicistico. Facendo clic sul pulsante Seleziona file verrà visualizzato il menu di selezione dei file. Puoi quindi stilizzare il pulsante come preferisci. Fondamentalmente, tutto ciò che devi fare è nascondere l'input del file e attivare un clic sintetico su di esso quando fai clic su un altro pulsante. L'ho provato su IE 9, FF e Chrome e funzionano tutti bene.


5

Questo funziona per me (almeno in Chrome e Firefox):

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

Tuttavia, la casella del titolo (contenente il carattere spazio unificatore) appare ancora.
2540625

La casella del titolo appare per me con una stringa vuota su Chrome.
AshD

4

Questo è complicato. Non sono riuscito a trovare un modo per selezionare l'elemento "nessun file scelto", quindi ho creato una maschera utilizzando lo pseudo selettore: after.

La mia soluzione richiede anche l'uso del seguente pseudo selettore per modellare il pulsante:

::-webkit-file-upload-button

Prova questo: http://jsfiddle.net/J8Wfx/1/

FYI: questo funzionerà solo nei browser webkit.

PS se qualcuno sa come visualizzare gli pseudo selettori webkit come quello sopra nell'ispettore webkit, per favore fatemelo sapere


Non ha funzionato per me su Chrome (il violino stesso mostra il tooltip scelto senza file)
AshD

4

Su tutti i browser e semplice. questo ha fatto per me

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


questa è un'ottima soluzione! ha funzionato benissimo per me perché dopo aver caricato il file, il nome del file sarebbe mostrato. gentile e grazie!

come si rimuove il tooltip? Lo vedo ancora
The Fool

3

Dovrai personalizzare molto il controllo per ottenere ciò.

Segui la guida su: http://www.quirksmode.org/dom/inputfile.html


1
Stavo per postare questo, oltre al fatto che c'è un plugin JQuery che fa una sorta di cosa simile filamentgroup.com/lab/…
Dreen

1
@ RyanMcDonough, non riesco a visualizzare alcun suggerimento su come nascondere il suggerimento nel collegamento che hai fornito, c'è qualcosa che mi manca?
German Latorre

Mi scuso, dovrei chiarire. Poiché non è possibile nascondere il suggerimento, sarà necessario personalizzare il controllo del modulo di input per ottenere un risultato simile. In un certo senso hackerare il controllo originale.
Ryan McDonough

@Dreen, vedo anche il suggerimento "Nessun file scelto" nel link che hai fornito, non risolve il problema ...
German Latorre

3

Avvolgi e rendi invisibile. Lavora in Chrome, Safari e FF.

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


2

È meglio evitare di utilizzare javascript non necessari. Puoi sfruttare il tag label per espandere il target di clic dell'input in questo modo:

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

Anche se l'input è nascosto, il collegamento funziona ancora come destinazione del clic e puoi modificarlo come preferisci.


2

Anche se imposti l'opacità a zero, apparirà il suggerimento. Prova visibility:hiddenl'elemento. Sta funzionando per me.


2

Per me funziona!

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

Quindi, è possibile utilizzare diversi tipi di stili come width, heighto altre proprietà, al fine di creare il proprio file di input.



1

Direttamente non puoi modificare molto sull'input [tipo = file].

Imposta l'opacità del file del tipo di input: 0 e prova a posizionare un elemento relativo [div / span / button] su di esso con CSS personalizzato

Prova questo http://jsfiddle.net/gajjuthechamp/pvyVZ/8/


1

Sorpresa di vedere nessuno menzionato event.preventDefault()

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

0

puoi impostare una larghezza per il tuo elemento che mostrerà solo il pulsante e nasconderà il "nessun file scelto".


0

Cerco una buona risposta per questo ... e ho trovato questo:

Prima elimina il "nessun file scelto"

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

quindi lavora il pulsante con il -webkit-file-upload-button, in questo modo:

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

spero che questo sia quello che stavi cercando, funziona per me.


0

Combinando alcuni dei suggerimenti sopra, usando jQuery, ecco cosa ho fatto:

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

E:

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

E metti la classe "inutilizzata" negli input del tuo file. Questo è semplice e funziona abbastanza bene.


0

La soluzione migliore, per me, è racchiudere l'input [type = "file"] in un wrapper e aggiungere del codice 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

Ho trovato una soluzione hacky che rimuove totalmente "Nessun file scelto" più lo spazio extra che viene aggiunto dopo quel testo (in Chrome ottengo qualcosa come: "Nessun file scelto").

Questo stava rovinando completamente l'allineamento della mia pagina, quindi ho davvero lottato per trovare una soluzione. All'interno dell'attributo style del tag di input, l'impostazione di "width" alla larghezza del pulsante eliminerà il testo e gli spazi finali. Poiché la larghezza del pulsante non è la stessa in tutti i browser (è un po 'più piccola in Firefox, ad esempio), ti consigliamo di impostare anche il colore dello stile sullo stesso colore dello sfondo della pagina (altrimenti un " No "potrebbe essere visibile). Il tag del mio file di input ha questo aspetto:

<input style="float:left; **width:88px;** **color:#000000;**" type="file" id="fileInput" onclick="fileOpen()">    

Non ho visto la soluzione qui sotto fino ad ora, poiché era così in fondo alla pagina. In ogni caso, non ho intenzione di eliminare la mia soluzione, poiché si spera che le informazioni sul colore dello stile saranno utili (ha risolto il problema di Firefox per me).
TonyLuigiC

0

So che è un po 'un trucco, ma tutto ciò che mi serviva era impostare il colore su trasparente nel foglio di stile - inline sarebbe simile a questo style = "color: transparent;".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.