2009-07-22 50 views

Trả lời

23

Nút không được gọi vào nút "duyệt" - đó chỉ là tên trình duyệt của bạn cung cấp cho nó. Các trình duyệt được tự do triển khai kiểm soát tải lên tệp nhưng chúng thích. Trong Safari, ví dụ, nó được gọi là "Chọn tập tin" và nó ở phía đối diện của bất cứ điều gì bạn có thể sử dụng.

Bạn có thể triển khai giao diện tùy chỉnh cho điều khiển tải lên bằng cách sử dụng the technique outlined on QuirksMode, nhưng điều đó không chỉ thay đổi văn bản của nút.

2

Các input type = "file" lĩnh vực là rất khó khăn bởi vì nó thường chạy khác trên mọi trình duyệt, nó không thể theo kiểu, hoặc có thể được theo kiểu một chút, tùy thuộc vào trình duyệt một lần nữa; và rất khó để thay đổi kích thước (tùy thuộc vào trình duyệt một lần nữa, nó có thể có kích thước tối thiểu không thể ghi đè).

Có các giải pháp thay thế. Tốt nhất là theo ý kiến ​​của tôi this one (kết quả là here).

0

Không, bạn không thể thay đổi văn bản của tệp tải lên tệp. Nhưng có một số thủ thuật để che phủ hình ảnh qua nút.

1

AFAIK bạn không thể thay đổi văn bản nút, nó được mã hóa cứng trong trình duyệt.

Nhưng có một số cách giải quyết để đặt một nút với khác nhau text/hình ảnh trên một hình thức:

link

0

Bạn cũng có thể sử dụng Uploadify, một plugin tải lên jQuery tuyệt vời, nó cho phép bạn tải lên nhiều tệp và cũng có thể tạo kiểu cho các trường tệp một cách dễ dàng. http://www.uploadify.com

5

Một chút JavaScript sẽ chăm sóc nó:

<script language="JavaScript" type="text/javascript"> 
function HandleBrowseClick() 
{ 
    var fileinput = document.getElementById("browse"); 
    fileinput.click(); 
    var textinput = document.getElementById("filename"); 
    textinput.value = fileinput.value; 
} 
</script> 

<input type="file" id="browse" name="fileupload" style="display: none"/> 
<input type="text" id="filename" readonly="true"/> 
<input type="button" value="Click to select file" id="fakeBrowse" onclick="HandleBrowseClick();"/> 

Không phải là giải pháp tìm kiếm đẹp nhất, nhưng nó hoạt động.

+0

Điều này sẽ hoàn toàn không sử dụng được nếu JS không có sẵn. (HTML cũng không hợp lệ). – Quentin

+0

@David Dorwad: Cảm ơn bạn đã chỉ ra điều hiển nhiên (JS không hoạt động khi JS không có sẵn). Trường hợp thế giới thực là điều này sẽ xảy ra là cực kỳ hiếm. Ngoài ra, tôi không có ý định cho bất kỳ ai sao chép và dán một cách mù quáng và sử dụng nó ngay lập tức, nó được dự định như một con trỏ để hiển thị một cách có thể đạt được mục tiêu trong tầm tay. Nhưng này, cảm ơn vì đã ngăn tôi đăng lại. – korona

+0

Vấn đề là HTML không hoạt động nếu JS không có sẵn. Một giải pháp viết rõ ràng sẽ làm suy giảm một cách duyên dáng và không rơi trở lại vị trí mà có một nút không làm gì cả. – Quentin

28
<script language="JavaScript" type="text/javascript"> 
function HandleBrowseClick() 
{ 
    var fileinput = document.getElementById("browse"); 
    fileinput.click(); 
} 
function Handlechange() 
{ 
var fileinput = document.getElementById("browse"); 
var textinput = document.getElementById("filename"); 
textinput.value = fileinput.value; 
} 
</script> 

<input type="file" id="browse" name="fileupload" style="display: none" onChange="Handlechange();"/> 
<input type="text" id="filename" readonly="true"/> 
<input type="button" value="Click to select file" id="fakeBrowse" onclick="HandleBrowseClick();"/> 

http://jsfiddle.net/J8ekg/

+1

Tôi đã sử dụng cách tiếp cận này và thực sự cảm thấy thoải mái với nó. Nhưng có một điều chính cần thay đổi: nếu bạn áp dụng display: none cho input đó, click không hoạt động, vì vậy tốt hơn nên dùng opacity: 0 ;. Cảm ơn!!! – cbarg

+0

opcaity không được hỗ trợ bởi các trình duyệt cũ hơn, vì vậy hãy cẩn thận với điều đó. –

+0

Bây giờ tôi tự hỏi điều gì sẽ xảy ra nếu tôi muốn gửi một biến khác, hãy gọi nó là 'group_id'. Tôi nên gửi nó như thế nào? trong HTML '' nhưng trong tập lệnh? – cbarg

3

Bạn có thể làm điều đó với một workaround css/JQ đơn giản: Tạo một nút giả mà gây nên các nút duyệt đó đang ẩn.

HTML

<input type="file"/> 
<button>Open</button> 

CSS

input { display: none } 

jQuery

$('button').click(function(e) { 
    e.preventDefault(); // prevents submitting 
    $('input').trigger('click'); 
}); 

demo

+1

Tại đây, hãy đảm bảo nút là nút "type =" "" hoặc nó sẽ gửi biểu mẫu. – Mihai

+0

JavaScript đã ngăn chặn nó. – Thielicious

5
  1. Gói số <input type="file"> với thẻ <label>;
  2. Thêm thẻ (có văn bản bạn cần) bên trong nhãn, chẳng hạn như <span> hoặc <a>;
  3. Làm cho thẻ này trông giống như một nút;
  4. Đặt input[type="file"] vô hình qua display: none.
Các vấn đề liên quan