Làm cách nào để thay đổi văn bản nút của <input type = tập tin lâm sàng />?


Câu trả lời:


153

Sử dụng Bootstrap FileStyle , được sử dụng để định kiểu các trường tệp của biểu mẫu. Nó là một plugin cho một thư viện thành phần dựa trên jQuery có tên là Twitter Bootstrap

Sử dụng mẫu:

Bao gồm:

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

Thông qua JavaScript:

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

Thông qua các thuộc tính dữ liệu:

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

Dường như không làm việc cho tôi. Nó vẫn hiển thị các nút mặc định của brorser. Ngoài ra, bản demo tại github.com/markusslima/bootstrap-filestyle.git cũng không hoạt động - tất cả các ví dụ hiển thị các nút mặc định. Tui bỏ lỡ điều gì vậy?
Ya.

7
@Tony Uhh .... điều gì khiến bạn nghĩ Bootstrap không sử dụng "hack <img /> hack" bên dưới? :-)
Andz

@ Bạn có thể cho biết trình duyệt nào và phiên bản nào không? Đã thử nghiệm ngay trên Chrome Phiên bản 43.0.2357.130 (64-bit) trên Linux và tất cả các ví dụ đều hoạt động hoàn hảo.
Fernando Kosh

20
Ném một thư viện javascript (có plugin!) Cho một vấn đề nhỏ như vậy là một sự quá mức không đáng có.
MKaama

3
Bị hạ bệ. Nó thậm chí không phải là một câu trả lời, chỉ có một cách giải quyết cần một thư viện bổ sung. Câu trả lời sẽ có ý định thay đổi hành vi kết xuất cho trình duyệt.
wdetac

108

Bạn có thể đặt một hình ảnh thay thế và làm như thế này:

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 : Trong IE9 và IE10 nếu bạn kích hoạt onClick trong đầu vào tệp qua javascript, biểu mẫu sẽ được gắn cờ là 'nguy hiểm' và không thể được gửi bằng javascript, không chắc chắn liệu nó có thể được gửi theo cách truyền thống hay không.


5
Đây là một giải pháp thông minh. Bạn cũng không thể làm điều này với một phần tử <button> sao?
Chỉ huy mã

1
@Code Commander -Cảm ơn, và vâng, bạn có thể làm điều đó với mọi phần tử bạn muốn, nhưng phổ biến nhất là phần tử <image>. Chỉ cần thoát khỏi nút + trường văn bản của "nhập tệp" ...
ParPar

2
Chỉ cần đối đầu với bất kỳ ai sử dụng ở trên, một số trình duyệt di động sẽ vô hiệu hóa kích hoạt nhấp vào tệp theo chương trình. Cụ thể, android 4 cho Galaxy S III
newshorts

Tôi đang sử dụng <input type="file" bên trong hàng Gridview asp.net, có hàng có thể được thêm động .. vì vậy sẽ rất đau đầu khi gọi trình kích hoạt nhấp chuột đầu vào có liên quan (của cùng một hàng) trong khi nhấp vào hình ảnh! : /
sohaiby

giải pháp của bạn không hoạt động. Bạn hoàn toàn không thiết lập đường viền, lề, phần đệm và màu nền hoặc nếu không thì điều đó là hiển nhiên
tiếng chuông báo

88

Ẩn tập tin đầu vào. Tạo một đầu vào mới để nắm bắt một sự kiện nhấp chuột và chuyển tiếp nó đến đầu vào ẩn:

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

ném vào một tệp HTA với chế độ eg7 tôi phải xóa ;phần cuối.
ATek

tuyệt vời, không muốn bao gồm bootstrap chỉ để thay đổi hai từ văn bản, nhưng bạn sẽ làm thế nào nếu đầu vào tệp được tạo động?
asparism

@asparism sử dụng JavaScript để thao tác DOM, ẩn nó bằng cách đặt kiểu của nó và sử dụng trước () và thêm phần tử đầu vào mới?
MushyPeas

3
@MushyPeas đó là cách dễ nhất. đã cố gắng chơi với css nhưng giải pháp này nhanh hơn và dễ dàng hơn nhiều. cảm ơn
Ma

2
Đây cũng là cách dễ nhất đối với tôi! Nó cũng cho phép tôi KIẾM nút tệp 'giả' như một trong các tùy chọn nút biểu mẫu khác - mà không phải lo lắng về việc hiển thị nút tệp "Duyệt" trông kỳ quặc.
Harry Mantheakis

47

Văn bản "tệp tải lên ..." được trình duyệt xác định trước và không thể thay đổi. Cách duy nhất để giải quyết vấn đề này là sử dụng thành phần tải lên dựa trên Flash hoặc Java như swfupload .


3
Bạn có thể chứng minh rằng nó không thể thay đổi?
dùng198729

Hoặc bằng cách duyệt mã nguồn của trình duyệt, ít nhất là đối với mã nguồn mở.
Pekka

Điều này có thể bằng câu trả lời (cho một câu hỏi khác, đại loại như "Tại sao nội dung của giá trị, 'VALUE =" C: \ someFile.txt "' cho trường đầu vào của loại tệp, 'TYPE =" FILE "', bị bỏ qua bởi trình duyệt? "): stackoverflow.com/questions/1342039
Peter Mortensen

23

Hoạt động hoàn hảo trên tất cả các trình duyệt Hy vọng nó cũng sẽ làm việc cho bạn.

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

Thay đổi content: 'Select some files';với văn bản bạn muốn trong''

NẾU KHÔNG LÀM VIỆC VỚI firefox, hãy sử dụng cái này thay vì đầu vào:

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

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

Tuy nhiên, hoạt động trên Safari
Cullub

Nó hoạt động hoàn hảo ở phần cuối của tôi trên FF 41.0.2. Bạn đang gặp phải vấn đề tương thích trình duyệt chéo, vui lòng tham khảo MODEL CSS BOX để giảm thiểu vấn đề.
Mã đen

1
Vấn đề có lẽ là FF được xây dựng trên Gecko chứ không phải webkit. (dự đoán tốt nhất của tôi)
Cullub

2
<nhãn id = "addButton" for = "Upload" style = "background-color: # 000; color: #fff; padding: 4px; Border-radius: 4px; font-family: monospace;" > Chọn một số tệp </ nhãn> <input id = "Tải lên" type = "tệp" nhiều = "nhiều" tên = "_ ảnh" accept = "image / *" style = "mức độ hiển thị: ẩn">
Mã đen

4
Được rồi cảm ơn! Hãy xem JSFiddle này . Nếu bạn chỉnh sửa câu trả lời của mình bằng điều đó, tôi nghĩ rằng nó xứng đáng là một upvote :)
Cullub

10

Đây là một plugin JQuery để thay đổi văn bản nút của phần tử tệp đầu vào.

Ví dụ HTML:

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

Ví dụ JS:

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

Kết quả:

kết quả plugin



9

Đơn giản

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

[Chỉnh sửa bằng đoạn trích]

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


Hãy thử xem những gì tôi đã làm ở đây jsfiddle.net
Ken Karlo

Cảm ơn, chính xác những gì tôi muốn :)
Garth Baker

7

Tôi nghĩ rằng đây là những gì bạn muốn:

<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

EDIT : Bây giờ tôi thấy các bình luận mà bạn đang hỏi về văn bản nút chứ không phải đường dẫn tệp. Lỗi của tôi. Tôi sẽ để lại câu trả lời ban đầu của tôi dưới đây trong trường hợp người khác vấp phải câu hỏi này diễn giải nó theo cách tôi đã làm ban đầu.

EDIT thứ 2 : Tôi đã xóa câu trả lời này vì tôi quyết định rằng tôi đã hiểu nhầm câu hỏi và câu trả lời của tôi không liên quan. Tuy nhiên, các bình luận trong một câu trả lời khác chỉ ra rằng mọi người vẫn muốn xem câu trả lời này vì vậy tôi đã xóa bỏ nó.

TRẢ LỜI GỐC CỦA TÔI (Tôi nghĩ rằng OP đang hỏi về đường dẫn, không phải văn bản nút):

Đây không phải là một tính năng được hỗ trợ vì lý do bảo mật . Trình duyệt web Opera được sử dụng để hỗ trợ này nhưng nó đã bị xóa. Hãy suy nghĩ về những gì sẽ có thể nếu điều này được hỗ trợ; Bạn có thể tạo một trang với đầu vào tải lên tệp, điền trước nó với đường dẫn đến một số tệp nhạy cảm và sau đó tự động gửi biểu mẫu bằng cách sử dụng javascript được kích hoạt bởi onloadsự kiện. Điều này sẽ xảy ra quá nhanh để người dùng làm bất cứ điều gì về nó.


3

Sử dụng <label>cho chú thích

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

Điều này hoạt động mà không có bất kỳ javascript . Bạn có thể trang trí nhãn theo bất kỳ mức độ phức tạp nào, theo nội dung trái tim của bạn. Khi bạn nhấp vào nhãn, nhấp chuột sẽ tự động được chuyển hướng đến đầu vào tệp. Đầu vào tập tin có thể được làm cho vô hình bằng bất kỳ phương pháp. Nếu bạn muốn nhãn xuất hiện như một nút, có nhiều giải pháp, ví dụ:

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

    text-decoration: none;
    color: initial;
}

2

Chỉ có lớp CSS & bootstrap

        <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. Trước đó <input type="file">, thêm một hình ảnh và <input style="position:absolute">nó sẽ chiếm không gian của<input type="file">
  2. Sử dụng CSS sau đây cho phần tử tệp

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

0

Nếu bạn sử dụng đường ray và gặp sự cố khi áp dụng nó, tôi muốn thêm một số mẹo từ câu trả lời ban đầu được đăng bởi @Fernando Kosh

  • Tải xuống tệp zip và sao chép tệp bootstrap-filestyle.min.js ke thư mục ứng dụng / tài sản / javascripts /
  • mở application.js của bạn và thêm dòng này bên dưới

    // = yêu cầu bootstrap-filestyle.min

  • mở cà phê của bạn và thêm dòng này

    $ (": file"). filestyle ({buttonName: "btn-chính", buttonB Before: true, buttonText: "Văn bản của bạn ở đây", icon: false});


0

Bạn chỉ có thể thêm một số thủ thuật css. bạn không cần javascript hoặc nhiều tệp đầu vào và tôi giữ thuộc tính giá trị hiện có . bạn chỉ cần thêm css . bạn có thể thử giải pháp này

.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

Đây là một cách để "thay đổi" văn bản của một đầu vào với loại tệp, với HTML và javascript thuần túy:

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

0

Đối với tôi nó không hoạt động văn bản tùy chỉnh với bootstrap-filestyle . Nó giúp trang trí nút nhưng nhắn tin kỳ lạ để được thay đổi, trước khi đấu vật với css tôi thử cách sau:

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

bootstrap-filestyle hiển thị thành phần dưới dạng span với một lớp có tên butonText, vì vậy khi tải tài liệu chỉ cần thay đổi văn bản. dễ dàng đúng và nó phải hoạt động trên tất cả các trình duyệt.

chúc mừng


0

Tôi đã làm nó như thế này cho dự án của tôi:

.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

Đây là một giải pháp thay thế có thể giúp ích cho bạn. Điều này ẩn văn bản xuất hiện ra khỏi nút, trộn nó với màu nền của div. Sau đó, bạn có thể cung cấp cho div một tiêu đề bạn thích.

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

Trong Chrome 39, tôi thấy cả văn bản IMPL UPLOAD và nút <input>. Có lẽ cách xử lý đầu vào tệp của chrome đã thay đổi kể từ khi bạn đăng bài này?
EricP

@ yan-bellavance bạn đang làm gì? Nếu bạn nghĩ rằng một câu trả lời là không chính xác hoặc không hữu ích, hãy downvote, nhưng không có cách nào làm mất nó!
Kaiido
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.