<İnput type = “file” /> düğme metnini nasıl değiştirebilirim?


Yanıtlar:


153

Formların dosya alanlarını biçimlendirmek için kullanılan Bootstrap FileStyle öğesini kullanın . Twitter Bootstrap adlı jQuery tabanlı bileşen kütüphanesi için bir eklentidir

Örnek kullanım:

Dahil etmek:

<script type="text/javascript" src="js/bootstrap-filestyle.min.js"> </script>

JavaScript ile:

$(":file").filestyle();

Veri özellikleri üzerinden:

<input type="file" class="filestyle" data-classButton="btn btn-primary" data-input="false" data-classIcon="icon-plus" data-buttonText="Your label here.">

Benim için çalışmıyor gibi görünüyor. Yine de brorser'ın varsayılan düğmelerini gösterir. Ayrıca, github.com/markusslima/bootstrap-filestyle.git adresindeki demo da çalışmaz - tüm örnekler varsayılan düğmeleri gösterir. Bir şey mi kaçırıyorum?
Ya.

7
@Tony Uhh .... Bootstrap'ın altında da "tuhaf <img /> hack" kullanmadığını düşündüren şey nedir? :-)
Andz

@Ya hangi tarayıcıyı ve sürümünü söyleyebilir misiniz? Şimdi Linux üzerinde Chrome Sürüm 43.0.2357.130 (64 bit) üzerinde test edildi ve tüm örnekler mükemmel çalışıyor.
Fernando Kosh

20
Böyle küçük bir problemin üzerine bir javascript kütüphanesi (bir eklenti ile!) Atmak, yetersiz bir aşırılıktır.
MKaama

3
Downvoted. Bu bir cevap bile değil, sadece fazladan bir kütüphaneye ihtiyaç duyan bir çözüm. Yanıt, tarayıcıların oluşturma davranışını değiştirmeyi amaçlamalıdır.
wdetac

108

Bunun yerine bir görüntü koyabilir ve şöyle yapabilirsiniz:

HTML:

<img src="/images/uploadButton.png" id="upfile1" style="cursor:pointer" />
<input type="file" id="file1"  name="file1" style="display:none" />

JQuery:

$("#upfile1").click(function () {
    $("#file1").trigger('click');
});

CAVEAT : IE9 ve IE10'da, onClick'i javascript yoluyla bir dosya girişinde tetiklerseniz, form 'tehlikeli' olarak işaretlenir ve javascript ile gönderilemez, geleneksel olarak gönderilip gönderilemeyeceğinden emin olamaz.


5
Bu akıllıca bir çözümdür. Bunu bir <düğmesi> öğesiyle de yapamaz mısın?
Kod Komutanı

1
@Kod Komutanı -Teşekkürler ve evet, istediğiniz her öğeyle yapabilirsiniz, ancak en yaygın olanı <image> öğesidir. Sadece "dosya girişi" nin düğme + metin alanından kurtulun ...
ParPar

2
Yukarıdakileri kullanan herkese açıktır, bazı mobil tarayıcılar dosya girişi tıklamalarını programlı olarak tetiklemeyi devre dışı bırakır. Özellikle, Galaxy S III için android 4
newshorts

Ben <input type="file" satırları dinamik olarak eklenebilir asp.net gridview satır içinde kullanıyorum .. bu yüzden bir görüntü tıklarken ilgili giriş tıklama tetikleyici (aynı satırın) çağırmak için gerçek bir ağrı olacak! : /
sohaiby

çözümünüz çalışmıyor. Prolly sınır, kenar boşluğu, dolgu ve arka plan rengi belirlemediniz ya da açık olurdu
yan bellavance

88

Dosya girişini gizleyin. Bir tıklama etkinliğini yakalamak için yeni bir giriş oluşturun ve bunu gizli girdiye iletin:

<input type="button" id="loadFileXml" value="loadXml" onclick="document.getElementById('file').click();" />
<input type="file" style="display:none;" id="file" name="file"/>

ie7 modu ile bir HTA dosyasına atma ;sonunda kaldırmak zorunda kaldı .
ATek

harika, sadece iki metin kelimesini değiştirmek için bootstrap eklemek istemiyorum, ancak dosya girişi dinamik olarak oluşturulduysa nasıl yapardınız?
asparizm

@ asparism DOM'yi manipüle etmek için JavaScript'i kullanıyor, stilini ayarlayarak gizliyor ve önce () kullanıyor ve yeni giriş öğesini eklensin mi?
MushyPeas

3
@MushyPeas en kolay yoludur. css ile oynamaya çalıştı ama bu çözüm çok daha hızlı ve daha kolay. teşekkürler
Mara

2
Benim için de en kolay yol buydu! Ayrıca garip görünümlü "Gözat" dosya düğmesini görüntüleme konusunda endişelenmenize gerek kalmadan 'sahte' dosya düğmesini diğer form düğmesi seçeneklerinden biri olarak STYLE yapmamı sağladı.
Harry Mantheakis

47

"Dosya yükle ..." metni tarayıcı tarafından önceden tanımlanmıştır ve değiştirilemez. Bu sorunu aşmanın tek yolu swfupload gibi Flash veya Java tabanlı bir yükleme bileşeni kullanmaktır .


3
Değiştirilemeyeceğini kanıtlayabilir misiniz?
user198729

Veya en azından Açık Kaynak kodlu tarayıcılar için tarayıcı kaynak kodlarına göz atarak.
Pekka

Bu, başka bir soruya, "Neden değer içeriği, 'VALUE =" C: \ someFile.txt "' gibi bir dosya türü, 'TYPE =" FILE "' türünde bir girdi alanı için göz ardı edilebilir. "): stackoverflow.com/questions/1342039
Peter Mortensen

23

Tüm Tarayıcılarda Mükemmel Çalışır Umarım sizin için de çalışır.

HTML:
<input type="file" class="custom-file-input">

CSS:

 .custom-file-input::-webkit-file-upload-button {
  visibility: hidden;
}
.custom-file-input::before {
  content: 'Select some files';
  display: inline-block;
  background: -webkit-linear-gradient(top, #f9f9f9, #e3e3e3);
  border: 1px solid #999;
  border-radius: 3px;
  padding: 5px 8px;
  outline: none;
  white-space: nowrap;
  -webkit-user-select: none;
  cursor: pointer;
  text-shadow: 1px 1px #fff;
  font-weight: 700;
  font-size: 10pt;
}
.custom-file-input:hover::before {
  border-color: black;
}
.custom-file-input:active::before {
  background: -webkit-linear-gradient(top, #e3e3e3, #f9f9f9);
}

İçinde content: 'Select some files';olmasını istediğiniz metinle değiştirin''

Firefox ile ÇALIŞMIYORSA giriş yerine bunu kullanın:

<label class="custom-file-input" for="Upload" >
</label>

<input id="Upload" type="file" multiple="multiple" name="_photos" accept="image/*" style="visibility: hidden">

Safari üzerinde çalışıyor
Cullub

Sonunda FF 41.0.2'de mükemmel çalışıyor. Çapraz tarayıcı uyumluluk sorunuyla karşılaşıyorsunuz, sorunu en aza indirmek için lütfen CSS BOX MODEL'e bakın.
Siyah Kod

1
Sorun muhtemelen FF'nin webkit değil Gecko üzerine kurulu olmasıdır. (en iyi tahminim)
Cullub

2
<label id = "addButton" = = "Yükle" stili = "arka plan rengi: # 000; renk: #fff; dolgu: 4px; sınır yarıçapı: 4px; font-family: monospace;" > Bazı Dosya Seçin </label> <input id = "Yükle" type = "dosya" multiple = "çoklu" name = "_ fotoğraf" accept = "image / *" style = "görünürlük: gizli">
Kod Siyah

4
Tamam teşekkürler! Bu JSFiddle'a göz atın . Cevabınızı bununla düzenlerseniz, sanırım bu bir upvote'a layık :)
Cullub

10

Bu , bir giriş dosyası öğesinin düğme metnini değiştirmek için kullanılan bir JQuery eklentisidir.

Örnek HTML:

<input type="file" id="choose-file" />

Örnek JS:

$('#choose-file').inputFileText({
    text: 'Select File'
});

Sonuç:

eklenti sonucu



9

basitçe

<label class="btn btn-primary">
  <i class="fa fa-image"></i> Your text here<input type="file" style="display: none;"  name="image">
</label>

[Snippet ile düzenle]

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>

<label class="btn btn-primary">
<i class="fa fa-image"></i> Your text here<input type="file" style="display: none;" name="image">
</label>


Burada ne yaptığımı görmeye çalış jsfiddle.net
Ken Karlo

Teşekkürler, tam olarak istediğim şey :)
Garth Baker

7

Bence istediğin bu:

<button style="display:block;width:120px; height:30px;" onclick="document.getElementById('getFile').click()">Your text here</button>


<input type='file' id="getFile" style="display:none"> 

3

DÜZENLEME : Şimdi düğme yolu hakkında sorduğunuz yorumlar tarafından görüyorum, dosya yolu değil. Benim hatam. Bu soru üzerine tökezleyen başka birinin bunu ilk yaptığım şekilde yorumlaması durumunda asıl cevabımı aşağıda bırakacağım.

2. DÜZENLEME : Bu yanıtı sildim çünkü soruyu yanlış anladığımı ve cevabımın alakalı olmadığını düşündüm. Bununla birlikte, başka bir yanıttaki yorumlar, insanların hala bu cevabı görmek istediğini ve bu yüzden silme işlemini geri aldığımı gösterdi.

ORİJİNAL CEVAPIM (OP'nin düğme metni değil, yolu sorduğunu düşündüm):

Bu, güvenlik nedeniyle desteklenen bir özellik değildir . Opera web tarayıcısı bunu desteklemek için kullanıldı, ancak kaldırıldı. Bu desteklenirse nelerin mümkün olabileceğini düşünün; Dosya yükleme girişine sahip bir sayfa oluşturabilir, bazı hassas dosyaların yolunu önceden doldurabilir ve ardından onloadolay tarafından tetiklenen javascript'i kullanarak formu otomatik olarak gönderebilirsiniz . Bu, kullanıcının bu konuda herhangi bir şey yapması için çok hızlı olur.


3

<label>Resim yazısı için kullanın

<form enctype='multipart/form-data' action='/uploads.php' method=post>
<label for=b1>
    <u>Your</u> caption here
<input style='width:0px' type=file name=upfile id=b1
 onchange='optionalExtraProcessing(b1.files[0])'
 accept='image/png'>
</label>
</form>

Bu herhangi bir javascript olmadan çalışır . Etiketi herhangi bir karmaşıklık derecesine, kalbinizin içeriğine göre dekore edebilirsiniz. Etiketi tıklattığınızda, tıklama otomatik olarak dosya girişine yönlendirilir. Dosya girdisinin kendisi herhangi bir yöntemle görünmez hale getirilebilir. Etiketin bir düğme gibi görünmesini istiyorsanız, birçok çözüm vardır, örneğin:

label u {
    -webkit-appearance: button;
    -moz-appearance: button;
    appearance: button;

    text-decoration: none;
    color: initial;
}

2

Yalnızca CSS ve bootstrap sınıfı

        <div class="col-md-4 input-group">
            <input class="form-control" type="text"/>
            <div class="input-group-btn">
                <label for="files" class="btn btn-default">browse</label>
                <input id="files" type="file" class="btn btn-default"  style="visibility:hidden;"/>
            </div>
        </div>

1
  1. Bundan önce <input type="file">, bir görüntü eklemek ve <input style="position:absolute">bunu alanını işgal edecek<input type="file">
  2. Dosya öğesine aşağıdaki CSS'yi kullanın

    position:relative;  
    opacity:0;  
    z-index:99;

0

raylar kullanıyorsanız ve uygulamakta sorun yaşıyorsanız, @Fernando Kosh tarafından gönderilen orijinal yanıttan bazı ipuçları eklemek istiyorum

  • Dosya zip dosyasını indirin ve dosya bootstrap-filestyle.min.js ke klasör uygulaması / asset / javascripts /
  • application.js dosyanızı açın ve bu satırı aşağıya ekleyin

    // = bootstrap-filestyle.min gerektirir

  • kahvenizi açın ve bu satırı ekleyin

    $ (": file"). filestyle ({buttonName: "btn-birincil", buttonBefore: true, buttonText: "Metniniz buraya", simge: false});


0

Sadece biraz css hilesi ekleyebilirsiniz. Eğer javascript gerekmez veya daha fazla giriş dosya ve i tutmak mevcut değer niteliğini . sadece css eklemeniz gerekir . bu çözümü deneyebilirsiniz.

.btn-file-upload{
     width: 187px;
     position:relative;
 }

.btn-file-upload:after{
    content:  attr(value);
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;    
    width: 48%;
    background: #795548;
    color: white;
    border-radius: 2px;
    text-align: center;
    font-size: 12px;
    line-height: 2;
 }
<input type="file" class="btn-file-upload" value="Uploadfile" />


0

Aşağıda, dosya türündeki bir girdinin metnini saf HTML ve javascript ile "değiştirmenin" bir yolu vardır:

<input id='browse' type='file' style='width:0px'>
<button id='browser' onclick='browse.click()'>
    *The text you want*
</button>

0

benim için özel metin bootstrap-filestyle ile çalışmıyor . Düğme dekorasyonu ile yardımcı olur, ancak metni değiştirmek için garip, css ile güreşmeden önce aşağıdakileri deneyin:

$( document ).ready(function() {
   $('.buttonText').html('Seleccione ficheros');
});

bootstrap-filestyle, bileşeni düğmeText adlı bir sınıfla yayılma alanı olarak oluşturur; bu nedenle belge yüklendiğinde metni değiştirin. kolay doğru ve tüm tarayıcılarda çalışması gerekir.

şerefe


0

Projem için böyle yaptım:

.btn-outlined.btn-primary {
  color: #000;
}
.btn-outlined.btn-primary:active, .btn-outlined.btn-positive:active, .btn-outlined.btn-negative:active {
  color:#000;
}
.btn-block {
  display: block;
  width: 100%;
  padding: 15px 0;
  margin-bottom: 10px;
  font-size: 18px;
  font-family: Arial, Helvetica, sans-serif;
  text-align: center;
}
<label for="fileUpload" class="btn btn-primary btn-block btn-outlined">Your text</label>
<input type="file" id="fileUpload"style="display: none;">


-1

Bu, size yardımcı olabilecek alternatif bir çözümdür. Bu, düğmenin dışında görünen metni, div'ın arka plan rengiyle karıştırarak gizler. Ardından div'e istediğiniz başlığı verebilirsiniz.

<div style="padding:10px;font-weight:bolder; background-color:#446655;color: white;margin-top:10px;width:112px;overflow: hidden;">
     UPLOAD IMAGE <input style="width:100px;color:#446655;display: inline;" type="file"  />
</div>

Chrome 39'da hem GÖRÜNTÜYÜ YÜKLE metnini hem de <input> düğmesini görüyorum. Bunu yayınladığınızdan beri belki de chrome'un dosya girişleri değişti mi?
EricP

@ yan-bellavance ne yapıyorsun? Bir cevabın yanlış veya faydalı olmadığını düşünüyorsanız, oy verin, ancak hiçbir şekilde tahrif etmeyin!
Kaiido
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.