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

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


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

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.


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

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

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


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.


5

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

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

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ć


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


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


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>


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ć.


2

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



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/


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.


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

0

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


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.


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.


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>


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.