2014-07-19 11 views
8

Zdarzenie onchange nie działa. Co mam zrobić, aby uzyskać wynik na tej samej stronie. Nie chcę przekierowywać do żadnej innej strony, aby przesłać obraz. Czy ten problem wynika z opencart? Nie wiem, czy prawidłowe jest pisanie w ten sposób na cpanelu. Używam opencart i cpanel. Czy jest jakiś inny sposób?zmiana wejścia pliku wymiany img src i zmiana koloru obrazu

HTML

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

skrypt

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

ma problem rozwiązany –

+0

@logan tak. http://jsfiddle.net/stN8U/1/ to rozwiązało mój problem Dziękuję. – Jill

+0

jeśli podana odpowiedź jest pomocna, zaakceptuj odpowiedź, które apartamenty są dla Ciebie lepsze. –

Odpowiedz

10

Musisz wysłać this obiekt tylko zamiast this.value podczas wywoływania onchange

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

ponieważ używasz input zmienną jako this w swojej funkcji, jak w wierszu

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

Working DEMO

EDIT - Spróbuj użyć jQuery jak poniżej -

usuń zmiany z pola wejściowego:

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

Bind onchange wydarzenie na polu wejściowym:

$(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/ i http://jsfiddle.net/stN8U/1/ oba działają dobrze dla mnie. Dziękuję Ci. a także wszelkie sugestie dotyczące zmiany koloru obrazu tylko flash lub photoshop jest opcja dla tego lub jest jakaś inna opcja? – Jill

+0

Tak, to zadziała, ostatecznie wiążisz zmianę zdarzenia do funkcji wprowadzania danych i wywoływania (która wykonuje resztę zadania). To samo wspomniałem w mojej odpowiedzi, ale umieściłem całą funkcję kodu wewnątrz wiązania, a nie w oddzielnej funkcji javascrpt. –

+0

Niestety nie mam pojęcia, jak zmienić kolor obrazu. Być może wiesz lepiej ode mnie, przepraszam za to. –

3

Spróbuj z tym kodem, można uzyskać podgląd obrazu podczas przesyłania

<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

w HTML : <input type="file" id="yourFile"> nie zapomnij, aby odwoływać się do pliku js lub umieścić następujący skrypt między <script></script> w skrypcie:

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