Jak mogę usunąć podpowiedź „Nie wybrano pliku” z pliku wejściowego w Chrome?

85

Chciałbym usunąć podpowiedź „Nie wybrano pliku” z pliku wejściowego w przeglądarce Google Chrome (widzę, że żadna podpowiedź nie jest wyświetlana w przeglądarce Firefox).

Proszę zauważyć, że nie mówię o tekście wewnątrz pola wejściowego, ale o podpowiedzi, która pojawia się po najechaniu myszą na dane wejściowe.

Próbowałem tego bez powodzenia:

$('#myFileInput').attr('title', '');
Niemiecki Latorre
źródło
1
Może spróbuj dodać spację w wartości atrybutu: attr ('title', ''). Podpowiedź będzie nadal widoczna, ale z pustą treścią.
cryss
1
sprawdź moją odpowiedź. użyj „title”: „space”
simon
Może ta odpowiedź może ci pomóc. stackoverflow.com/a/25825731/1323461
LCB

Odpowiedzi:

61

Jest to natywna część przeglądarek Webkit i nie można jej usunąć. Powinieneś pomyśleć o hackerskim rozwiązaniu, takim jak zakrywanie lub ukrywanie danych wejściowych pliku.

Hacky rozwiązanie:

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

Skrzypce

nieokreślony
źródło
Wow, to zła wiadomość ... Czy jest dostępna dokumentacja, która wspomina o tym problemie (mam na myśli fakt, że nie można usunąć tej podpowiedzi)?
Niemiecki Latorre
2
Etykietka jest nadal wyświetlana po najechaniu kursorem na dolną krawędź danych wejściowych. „Krycie: 0” nie rozwiązuje problemu.
Webars
1
@Webars Wspomniałem o hackach, a nie kuloodpornych.
undefined
7
@NisanthSojan Więc uczyń to lepszym, to był tylko przykład.
nieokreślony
1
Jeden z najczystszych hacków, jakie widziałem. Mam nadzieję, że będzie działać we wszystkich przeglądarkach, takich jak IE9 +, FF, Safari. Działa doskonale w Chrome.
Pawan Pillai
59

Domyślną podpowiedź można edytować za pomocą atrybutu tytułu

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

Ale jeśli spróbujesz usunąć tę wskazówkę

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

To nie zadziała. Oto moja mała sztuczka, aby to zrobić, spróbuj tytułu ze spacją. To będzie działać.:)

<input type='file' title=" "/>
Szymon
źródło
Działa w wersji Chromium 44.0.2403.89 i nie ma żadnych skutków ubocznych w wersji 40.0.3! Świetny wkład @simon
Robert Siemer
ale Twój niestandardowy tytuł pojawi się nawet po wybraniu plików.
Monicka
Zintegrowałem to rozwiązanie z silnikiem wiążącym (aureliajs, angular, ...) i działa to bardzo dobrze, aby obliczyć właściwą wiadomość i pokazać ją użytkownikowi.
ConductedClever
58

Dla mnie chciałem, aby tekst był niewidoczny i nadal używał natywnego przycisku przeglądarki.

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

Podobają mi się wszystkie sugestie undefined, ale miałem inny przypadek użycia, mam nadzieję, że pomoże to komuś w tej samej sytuacji.

Dwayne Forde
źródło
2
Nie odebrał mi „nie wybrano pliku”.
MEM
6
to pozbywa się dla mnie „nie wybrano pliku”
Brian
@MEM, której przeglądarki używasz? To działa dla mnie w Chrome (z pewnymi modyfikacjami, ponieważ nie chcę, aby tekst zniknął).
Brilliand
To najlepsza odpowiedź na rok 2020. Ustawienie krycia na 0 sprawia, że ​​cały element jest niewidoczny.
Xenalin
12

Znalazłem rozwiązanie, które jest bardzo łatwe, wystarczy ustawić pusty ciąg w atrybucie tytułu.

<input type="file" value="" title=" " />
JNTN B77
źródło
2
Powinieneś po prostu uczynić title = "" w przeciwnym razie title = "" wyświetla pustą podpowiedź.
ufukomer
9

Możesz wyłączyć podpowiedź, ustawiając tytuł ze spacją w przeglądarkach webkit, takich jak Chrome, i pustym ciągiem w przeglądarce Firefox lub IE (testowane na Chrome 35, FF 29, IE 11, Safari mobile)

$('input[type="file"]').attr('title', window.webkitURL ? ' ' : '');
jbier
źródło
Dzięki za edycję. Chciałbym znaleźć rozwiązanie bez wedkitURL, ponieważ jest ono przestarzałe.
jbier
Ta odpowiedź jest jedyną, która działała dla mnie, po prostu zastąpiłem wykrywanie przeglądarki tym, które podano w stackoverflow.com/questions/9847580/ ...
yvesmancera
8

Bardzo łatwo, zapomnij o CSS kierującym się na wejście ["typ"], to nie działa dla mnie. Nie wiem dlaczego. Mam rozwiązanie w tagu HTML

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

Koniec problemu

Lawel
źródło
5

Wszystkie odpowiedzi tutaj są całkowicie przesadzone lub po prostu całkowicie błędne.

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/

Stworzyłem to skrzypce w najbardziej uproszczony sposób. Kliknięcie przycisku Wybierz plik spowoduje wyświetlenie menu wyboru pliku. Następnie możesz stylizować przycisk w dowolny sposób. Zasadniczo wszystko, co musisz zrobić, to ukryć dane wejściowe pliku i wywołać syntetyczne kliknięcie po kliknięciu innego przycisku. Wyrywkowo przetestowałem to na IE 9, FF i Chrome i wszystkie działają dobrze.

LadyCailin
źródło
5

Ten działa dla mnie (przynajmniej w Chrome i Firefox):

<input type="file" accept="image/*" title="&nbsp;"/>
Андрей Куценко
źródło
Nadal jednak pojawia się pole tytułu (zawierające nierozdzielającą spację).
2540625
Pole tytułu pojawia się dla mnie z pustym ciągiem na chrome.
AshD
4

To jest podchwytliwe. Nie mogłem znaleźć sposobu na wybranie elementu „no file selected”, więc utworzyłem maskę za pomocą pseudo selektora: after.

Moje rozwiązanie wymaga również użycia następującego pseudoselektora do stylizacji przycisku:

::-webkit-file-upload-button

Spróbuj tego: http://jsfiddle.net/J8Wfx/1/

FYI: To będzie działać tylko w przeglądarkach webkit.

PS jeśli ktoś wie, jak wyświetlić pseudo selektory webkit, takie jak ten powyżej w inspektorze webkitów, daj mi znać

jameswakefield
źródło
Nie działało dla mnie na chrome (same skrzypce pokazują podpowiedź bez wybranego pliku)
AshD
4

We wszystkich przeglądarkach i proste. to zrobiło to dla mnie

$(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
źródło
to świetne rozwiązanie! działało świetnie, ponieważ po przesłaniu pliku pojawiła się nazwa pliku. miło i dziękuję!
w jaki sposób to usuwa podpowiedź? Nadal to widzę
The Fool
3

Aby to osiągnąć, będziesz musiał dostosować sterowanie.

Postępuj zgodnie z przewodnikiem pod adresem : http://www.quirksmode.org/dom/inputfile.html

Ryan McDonough
źródło
1
Miałem zamiar to opublikować, a ponadto jest wtyczka JQuery, która robi coś podobnego filamentgroup.com/lab/ ...
Dreen
1
@RyanMcDonough, nie widzę żadnych wskazówek dotyczących ukrywania podpowiedzi w podanym przez Ciebie łączu. Czy jest coś, czego mi brakuje?
Niemiecki Latorre
Przepraszam, powinienem wyjaśnić. Ponieważ nie ma sposobu, aby ukryć tę podpowiedź, musisz dostosować kontrolkę formularza wejściowego, aby uzyskać podobny wynik. W pewnym sensie hakowanie oryginalnej kontroli.
Ryan McDonough,
@Dreen, widzę podpowiedź "Nie wybrano pliku" w podanym przez ciebie linku, to nie rozwiązuje problemu ...
Niemiecki Latorre,
3

Owinąć i uczynić niewidzialnym. Pracuj w Chrome, Safari i FF.

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

vovchisko
źródło
2

Lepiej unikać niepotrzebnego javascript. Możesz skorzystać z tagu etykiety, aby rozwinąć cel kliknięcia wejścia w następujący sposób:

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

Mimo że dane wejściowe są ukryte, łącze nadal działa jako cel kliknięcia i możesz je dowolnie zmieniać.

Czas
źródło
2

Nawet jeśli ustawisz krycie na zero, pojawi się podpowiedź. Przymierz visibility:hiddenelement. To działa dla mnie.

Raa Vijay
źródło
1

Bezpośrednio nie możesz zbytnio modyfikować danych wejściowych [typ = plik].

Ustaw krycie pliku typu wejściowego na 0 i spróbuj umieścić na nim element względny [div / span / button] za pomocą niestandardowego CSS

Spróbuj tego http://jsfiddle.net/gajjuthechamp/pvyVZ/8/

Mistrz
źródło
1

Mi to pasuje!

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

Następnie można użyć różnego rodzaju stylów, takich jak width, heightlub innych właściwości w celu stworzenia własnego pliku wejściowego.

slorenzo
źródło
1

Zaskoczenie, że nikt o tym nie wspomniał event.preventDefault()

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

możesz ustawić szerokość elementu, który pokaże tylko przycisk i ukryje "nie wybrano pliku".

Sotiris
źródło
0

Szukam dobrej odpowiedzi na to ... i znalazłem to:

Najpierw usuń „nie wybrano pliku”

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

następnie przerabiaj przycisk z -webkit-file-upload-button, w ten sposób:

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

mam nadzieję, że to jest to, czego szukałeś, działa dla mnie.

devash23
źródło
0

Łącząc niektóre z powyższych sugestii, używając jQuery, oto co zrobiłem:

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

I:

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

I umieść klasę „nieużywaną” w plikach wejściowych. To jest proste i działa całkiem nieźle.

Pomocnik danych
źródło
0

Dla mnie najlepszym rozwiązaniem jest zawinięcie danych wejściowych [type = "file"] w opakowanie i dodanie kodu 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
źródło
0

Wymyśliłem hackerskie rozwiązanie, które całkowicie usuwa „Nie wybrano pliku” oraz dodatkową spację, która jest dodawana po tym tekście (w Chrome pojawia się coś w stylu: „Nie wybrano pliku”).

To całkowicie zepsuło wyrównanie mojej strony, więc naprawdę walczyłem z tym, aby znaleźć rozwiązanie. Wewnątrz atrybutu style znacznika wejściowego ustawienie „width” na szerokość przycisku wyeliminuje końcowy tekst i spacje. Ponieważ szerokość przycisku nie jest taka sama we wszystkich przeglądarkach (jest trochę mniejsza, na przykład w Firefoksie), zechcesz również ustawić kolor stylu na taki sam, jak kolor tła strony (w przeciwnym razie zbłąkany ” Żadne „nie może się wyświetlać). Mój znacznik pliku wejściowego wygląda następująco:

<input style="float:left; **width:88px;** **color:#000000;**" type="file" id="fileInput" onclick="fileOpen()">    
TonyLuigiC
źródło
Do tej pory nie widziałem rozwiązania poniżej, ponieważ znajdowało się tak daleko na stronie. W każdym razie nie zamierzam usuwać mojego rozwiązania, ponieważ mam nadzieję, że informacje o kolorze stylu będą przydatne (rozwiązało to dla mnie problem z Firefoksem).
TonyLuigiC
0

Wiem, że to trochę hack, ale wszystko, czego potrzebowałem, to ustawić kolor na przezroczysty w arkuszu stylów - inline wyglądałoby tak, jakby to style = "color: transparent;".

tgibbons
źródło