2014-07-19 23 views
8

sự kiện trao đổi không hoạt động. Tôi phải làm gì để có được kết quả trên cùng một trang. Tôi không muốn chuyển hướng đến bất kỳ trang nào khác để tải lên hình ảnh. Vấn đề này có phải là do opencart không? Tôi không biết nếu nó là chính xác để viết như thế này trong cPanel. Tôi đang sử dụng opencart và cPanel. Còn cách nào khác không?thay đổi đầu vào tệp thay đổi img src và thay đổi màu hình ảnh

HTML

<input type='file' id="upload" onchange="readURL(this.value)" /> 
    <img id="img" src="#" alt="your image" /> 

kịch bản

function readURL(input) { 
var url = input.value; 
var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase(); 
if (input.files && input.files[0]&& (ext == "gif" || ext == "png" || ext == "jpeg" || ext == "jpg")) { 
    var reader = new FileReader(); 

    reader.onload = function (e) { 
     $('#img').attr('src', e.target.result); 
    } 
    reader.readAsDataURL(input.files[0]); 
} 
else{ 
    $('#img').attr('src', '/assets/no_preview.png'); 
    } 
} 

JSFiddle

+0

đã giải quyết vấn đề của bạn –

+0

@logan vâng. http://jsfiddle.net/stN8U/1/ điều này giải quyết vấn đề của tôi Cảm ơn bạn. – Jill

+0

nếu câu trả lời được cung cấp là hữu ích, hãy chấp nhận câu trả lời mà các suite bạn tốt hơn. –

Trả lời

10

Bạn cần phải gửi this đối tượng duy nhất thay vì this.value khi gọi onchange

<input type='file' id="upload" onchange="readURL(this)" /> 

vì bạn đang sử dụng input biến như this trong chức năng của bạn, giống như tại dòng

var url = input.value;// reading value property of input element 

Working DEMO

EDIT - Hãy thử sử dụng jQuery như dưới đây -

xóa onchange khỏi trường nhập:

<input type='file' id="upload" > 

Bind onchange sự kiện vào trường nhập:

$(function(){ 
    $('#upload').change(function(){ 
    var input = this; 
    var url = $(this).val(); 
    var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase(); 
    if (input.files && input.files[0]&& (ext == "gif" || ext == "png" || ext == "jpeg" || ext == "jpg")) 
    { 
     var reader = new FileReader(); 

     reader.onload = function (e) { 
      $('#img').attr('src', e.target.result); 
     } 
     reader.readAsDataURL(input.files[0]); 
    } 
    else 
    { 
     $('#img').attr('src', '/assets/no_preview.png'); 
    } 
    }); 

}); 

jQuery Demo

+1

http://jsfiddle.net/M3kj6/1/ và http://jsfiddle.net/stN8U/1/ cả hai đều hoạt động tốt cho tôi. Cảm ơn bạn. và cũng có bất kỳ gợi ý cho làm thế nào để thay đổi màu sắc hình ảnh chỉ flash hoặc photoshop là tùy chọn cho điều này hoặc là có bất kỳ tùy chọn khác ?? – Jill

+0

có điều này sẽ làm việc, cuối cùng bạn đang ràng buộc sự kiện thay đổi để tập tin đầu vào và chức năng gọi điện thoại (mà làm phần còn lại của nhiệm vụ). Điều tương tự tôi đã đề cập trong câu trả lời của tôi nhưng đặt tất cả các mã bên trong hàm ràng buộc và không phải trong hàm javascrpt riêng biệt. –

+0

Rất tiếc, tôi không có ý tưởng về cách thay đổi màu của hình ảnh. Có thể bạn biết rõ hơn tôi, xin lỗi về điều đó. –

3

Hãy thử với mã này, bạn sẽ nhận được bản xem trước hình ảnh trong khi tải lên

<input type='file' id="upload" onChange="readURL(this);"/> 
<img id="img" src="#" alt="your image" /> 

function readURL(input){ 
var ext = input.files[0]['name'].substring(input.files[0]['name'].lastIndexOf('.') + 1).toLowerCase(); 
if (input.files && input.files[0] && (ext == "gif" || ext == "png" || ext == "jpeg" || ext == "jpg")) 
    var reader = new FileReader(); 
    reader.onload = function (e) { 
     $('#img').attr('src', e.target.result); 
    } 

    reader.readAsDataURL(input.files[0]); 
}else{ 
    $('#img').attr('src', '/assets/no_preview.png'); 
} 
} 
5

trong HTML của bạn : <input type="file" id="yourFile"> đừng quên tham khảo tập tin js của bạn hoặc đặt kịch bản sau đây giữa <script></script> trong kịch bản của bạn:

var fileToRead = document.getElementById("yourFile"); 

fileToRead.addEventListener("change", function(event) { 
    var files = fileToRead.files; 
    var len = files.length; 
    // we should read just one file 
    if (len) { 
     console.log("Filename: " + files[0].name); 
     console.log("Type: " + files[0].type); 
     console.log("Size: " + files[0].size + " bytes"); 
    } 

}, false); 
Các vấn đề liên quan