2013-11-27 19 views
14

Tôi có 4 đầu vào tệp mà tôi muốn chúng kích hoạt quá trình tải lên khi giá trị của chúng được thay đổi. Tôi có nghĩa là khi bạn chọn một hình ảnh và nhấp vào mở trên hộp thoại chọn hình ảnh, kịch bản để tải lên hình ảnh được kích hoạt. Tôi đã sử dụng onchange sự kiện nhưng tôi nghĩ rằng đây không phải là trường hợp phải:về sự kiện thay đổi cho phần tử nhập tệp

JS:

$("input[type=file]").on('change',function(){ 
    alert(this.val());//I mean name of the file 
}); 

HTML:

<div class="form-group col-md-11 col-md-offset-1"> 
    <input type="file" name="photos[]"> 
    <input type="file" name="photos[]"> 
    <input type="file" name="photos[]"> 
    <input type="file" name="photos[]"> 
</div> 

Tôi nên làm gì?

+0

thể trùng lặp của [? Làm thế nào để có được tất cả tên tập tin hình ảnh trước khi bắt đầu tải lên] (http://stackoverflow.com/questions/18400686/how-to-get-all-image-file-name-before-start-upload) hoặc http://stackoverflow.com/questions/1804745/get-the-filename-through-javascript – ahren

+1

'val()' là một hàm jquery, nhưng 'this' trong ngữ cảnh của bạn là một đối tượng DOM. Hãy thử 'this.value' hoặc' $ (this) .val() 'và xem điều gì xảy ra. –

Trả lời

4

Sử dụng files filelist của nguyên tố này thay vì val()

$("input[type=file]").on('change',function(){ 
    alert(this.files[0].name); 
}); 
+0

Khi nào sự kiện thay đổi kích hoạt? Có phải khi chúng tôi chọn một tệp mới hoặc khi tệp được tải hoàn toàn không? Nếu trước đây của nó thì làm cách nào tôi có thể kích hoạt sự kiện khi tệp được tải hoàn toàn? –

1

Cho lớp độc đáo và id khác nhau cho tập tin đầu vào

  $("#tab-content").on('change',class,function() 
       { 
        var id=$(this).attr('id'); 
         $("#"+id).trigger(your function); 
       //for name of file input $("#"+id).attr("name"); 
       }); 
+0

Điều này thực sự hiệu quả. Việc ràng buộc sự kiện với thành phần chính sẽ kích hoạt sự kiện thay đổi mỗi khi nó thực sự thay đổi. – russinkungen

11

Sự kiện OnChange là một lựa chọn tốt. Nhưng nếu người dùng chọn cùng một hình ảnh, sự kiện sẽ không được kích hoạt vì giá trị hiện tại giống với giá trị trước đó.

Hình ảnh giống với chiều rộng đã thay đổi, ví dụ và hình ảnh phải được tải lên máy chủ.

Để ngăn chặn vấn đề này bạn có thể sử dụng đoạn mã sau:

$(document).ready(function(){ 
    $("input[type=file]").click(function(){ 
     $(this).val(""); 
    }); 

    $("input[type=file]").change(function(){ 
     alert($(this).val()); 
    }); 
}); 
+0

Có vẻ như firefox sẽ kích hoạt sự kiện ngay cả khi nó là cùng một hình ảnh, nhưng chrome sẽ không. – ooolala

Các vấn đề liên quan