2016-01-11 10 views
10

jQueryで複数の入力画像のプレビューを試みました。画像のプレビューは正常に動作しますが、同じdivの画像プレビューでは、別のdivの各画像プレビューが必要です。どうしたらいいですか?jQueryによる画像プレビュー

HTML

<html> 
    <form action="index.php" id="myForm" name="myForm" enctype="multipart/form-data" method="post" accept-charset="utf-8"> 
    desktop:<input type="file" id="files" name="files" multiple><br/> 
      <div id="selectedFiles"></div> 
     mobile:<input type="file" id="mobile" name="mobile" multiple><br/> 
      <div id="selectFiles"></div> 
    <button type="submit">Submit</button> 
    </form></br></body> 
</html> 

custom.js

$(document).ready(function() { 
/*multiple image preview first input*/ 

    $("#files").on("change", handleFileSelect); 

    selDiv = $("#selectedFiles"); 
    $("#myForm").on("submit", handleForm); 

    $("body").on("click", ".selFile", removeFile); 

    /*end image preview */ 

    /* Multiple image preview second input*/ 
    $("#mobile").on("change", handleFileSelect); 

    selDivM = $("#selectFiles"); 
    $("#myForm").on("submit", handleForm); 

    $("body").on("click", ".selFile", removeFile); 

    /*end image preview*/ 
)} 

方法
機能ハンドルファイルのための

var selDiv = ""; 
var selDivM=""; 
var storedFiles = []; 

function handleFileSelect(e) { 
    var files = e.target.files; 
    var filesArr = Array.prototype.slice.call(files); 
    filesArr.forEach(function(f) { 

    if(!f.type.match("image.*")) { 
     return; 
    } 
    storedFiles.push(f); 

    var reader = new FileReader(); 
    reader.onload = function (e) { 
    var html = "<div><img src=\"" + e.target.result + "\"  data-file='"+f.name+"' class='selFile' title='Click to remove'>" + f.name + "<br clear=\"left\"/></div>"; 
     if (typeof selDivM !== "") { 
      selDivM.append(html); 
     }else { 
      selDiv.append(html); 
     } 

    } 
    reader.readAsDataURL(f); 
}); 

} 
を選択ハンドルのフォームのための3210

機能

function handleForm(e) { 
e.preventDefault(); 
var data = new FormData(); 

for(var i=0, len=storedFiles.length; i<len; i++) { 
    data.append('files', storedFiles[i]); 
} 

var xhr = new XMLHttpRequest(); 
xhr.open('POST', 'handler.cfm', true); 

xhr.onload = function(e) { 
    if(this.status == 200) { 
     console.log(e.currentTarget.responseText); 
     alert(e.currentTarget.responseText + ' items uploaded.'); 
    } 
} 

xhr.send(data); 
} 

クリックした場合は削除ファイルの機能

function removeFile(e) { 
    var file = $(this).data("file"); 
    for(var i=0;i<storedFiles.length;i++) { 
    if(storedFiles[i].name === file) { 
     storedFiles.splice(i,1); 
     break; 
    } 
} 
$(this).parent().remove(); 
} 

see code pen snippet

$(document).ready(function() { 
 
    /*multiple image preview first input*/ 
 

 
    $("#files").on("change", handleFileSelect); 
 

 
    selDiv = $("#selectedFiles"); 
 
    $("#myForm").on("submit", handleForm); 
 

 
    $("body").on("click", ".selFile", removeFile); 
 

 
    /*end image preview */ 
 

 
    /* Multiple image preview second input*/ 
 
    $("#mobile").on("change", handleFileSelect); 
 

 
    selDivM = $("#selectFiles"); 
 
    $("#myForm").on("submit", handleForm); 
 

 
    $("body").on("click", ".selFile", removeFile); 
 
}); 
 
    /*multiple image preview*/ 
 

 

 
var selDiv = ""; 
 
// var selDivM=""; 
 
var storedFiles = []; 
 

 
function handleFileSelect(e) { 
 
    var files = e.target.files; 
 
    var filesArr = Array.prototype.slice.call(files); 
 
    filesArr.forEach(function(f) { 
 

 
     if(!f.type.match("image.*")) { 
 
      return; 
 
     } 
 
     storedFiles.push(f); 
 

 
     var reader = new FileReader(); 
 
     reader.onload = function (e) { 
 
      var html = "<div><img src=\"" + e.target.result + "\" data-file='"+f.name+"' class='selFile' title='Click to remove'>" + f.name + "<br clear=\"left\"/></div>"; 
 
      selDivM.append(html); 
 
      } 
 
     reader.readAsDataURL(f); 
 
    }); 
 

 
} 
 

 
function handleForm(e) { 
 
    e.preventDefault(); 
 
    var data = new FormData(); 
 

 
    for(var i=0, len=storedFiles.length; i<len; i++) { 
 
     data.append('files', storedFiles[i]); 
 
    } 
 

 
    var xhr = new XMLHttpRequest(); 
 
    xhr.open('POST', 'handler.cfm', true); 
 

 
    xhr.onload = function(e) { 
 
     if(this.status == 200) { 
 
      console.log(e.currentTarget.responseText); 
 
      alert(e.currentTarget.responseText + ' items uploaded.'); 
 
     } 
 
    } 
 

 
    xhr.send(data); 
 
} 
 

 
function removeFile(e) { 
 
    var file = $(this).data("file"); 
 
    for(var i=0;i<storedFiles.length;i++) { 
 
     if(storedFiles[i].name === file) { 
 
      storedFiles.splice(i,1); 
 
      break; 
 
     } 
 
    } 
 
    $(this).parent().remove(); 
 
}
#selectedFiles img { 
 
      max-width: 200px; 
 
      max-height: 200px; 
 
      float: left; 
 
      margin-bottom:10px; 
 
     } 
 
     #userActions input{ 
 
      width: auto; 
 
      margin: auto; 
 
     } 
 
     #selectFiles img { 
 
      max-width: 200px; 
 
      max-height: 200px; 
 
      float: left; 
 
      margin-bottom:10px; 
 
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<html> 
 
    <body> 
 
    <form action="index.php" id="myForm" name="myForm" enctype="multipart/form-data" method="post" accept-charset="utf-8"> 
 
    desktop:<input type="file" id="files" name="files" multiple><br/> 
 
      <div id="selectedFiles"></div> 
 
     mobile:<input type="file" id="mobile" name="mobile" multiple><br/> 
 
      <div id="selectFiles"></div> 
 
    <button type="submit">Submit</button> 
 
    </form> 
 
    </body> 
 
</html>

+0

に基づいて、プレビューのdiv要素を作成するには、画像SRC用のデータを受信することができます? – Muhammed

+0

関数 'handleFileSelect(e)'の内部で 'e.target.name'のような名前を取得すると' files'または 'mobile'を返します。それに基づいて、あなたが望むようにdivにそれを追加することができます。 –

+0

こんにちは、私はちょうど削除機能がここでどのように機能するのか知りたいですか?それは私のコードで私のために働いていない。 Handler.cfmが必要ですか? – Sravan

答えて

2

をお楽しみください。これはあなたの切り取らに基づいています....デバイスタイプ

$(document).ready(function() { 
 
    /*multiple image preview first input*/ 
 

 
    $("#files").on("change", handleFileSelect); 
 

 
    selDiv = $("#selectedFiles"); 
 
    $("#myForm").on("submit", handleForm); 
 

 
    $("body").on("click", ".selFile", removeFile); 
 

 
    /*end image preview */ 
 

 
    /* Multiple image preview second input*/ 
 
    $("#mobile").on("change", handleFileSelect); 
 

 
    selDivM = $("#selectFilesM"); 
 
    $("#myForm").on("submit", handleForm); 
 

 
    $("body").on("click", ".selFile", removeFile); 
 

 
    console.log($("#selectFilesM").length); 
 
}); 
 
/*multiple image preview*/ 
 

 

 
var selDiv = ""; 
 
// var selDivM=""; 
 
var storedFiles = []; 
 

 
function handleFileSelect(e) { 
 

 
    var files = e.target.files; 
 
    var filesArr = Array.prototype.slice.call(files); 
 
    var device = $(e.target).data("device"); 
 
    filesArr.forEach(function(f) { 
 

 
    if (!f.type.match("image.*")) { 
 
     return; 
 
    } 
 
    storedFiles.push(f); 
 

 
    var reader = new FileReader(); 
 
    reader.onload = function(e) { 
 
     var html = "<div><img src=\"" + e.target.result + "\" data-file='" + f.name + "' class='selFile' title='Click to remove'>" + f.name + "<br clear=\"left\"/></div>"; 
 

 
     if (device == "mobile") { 
 
     $("#selectedFilesM").append(html); 
 
     } else { 
 
     $("#selectedFiles").append(html); 
 
     } 
 
    } 
 
    reader.readAsDataURL(f); 
 
    }); 
 

 
} 
 

 
function handleForm(e) { 
 
    e.preventDefault(); 
 
    var data = new FormData(); 
 

 
    for (var i = 0, len = storedFiles.length; i < len; i++) { 
 
    data.append('files', storedFiles[i]); 
 
    } 
 

 
    var xhr = new XMLHttpRequest(); 
 
    xhr.open('POST', 'handler.cfm', true); 
 

 
    xhr.onload = function(e) { 
 
    if (this.status == 200) { 
 
     console.log(e.currentTarget.responseText); 
 
     alert(e.currentTarget.responseText + ' items uploaded.'); 
 
    } 
 
    } 
 

 
    xhr.send(data); 
 
} 
 

 
function removeFile(e) { 
 
    var file = $(this).data("file"); 
 
    for (var i = 0; i < storedFiles.length; i++) { 
 
    if (storedFiles[i].name === file) { 
 
     storedFiles.splice(i, 1); 
 
     break; 
 
    } 
 
    } 
 
    $(this).parent().remove(); 
 
}
#selectedFiles img, 
 
#selectFilesM img { 
 
    max-width: 200px; 
 
    max-height: 200px; 
 
    float: left; 
 
    margin-bottom: 10px; 
 
} 
 
#userActions input { 
 
    width: auto; 
 
    margin: auto; 
 
} 
 
#selectFiles img, 
 
#selectFilesM img { 
 
    max-width: 200px; 
 
    max-height: 200px; 
 
    float: left; 
 
    margin-bottom: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action="index.php" id="myForm" name="myForm" enctype="multipart/form-data" method="post" accept-charset="utf-8"> 
 
    desktop: 
 
    <input data-device="desktop" type="file" id="files" name="files" multiple> 
 
    <div id="selectedFiles"></div> 
 
    <br/>mobile: 
 
    <input data-device="mobile" type="file" id="mobile" name="mobile" multiple> 
 
    <br/> 
 

 
    <div id="selectedFilesM"></div> 
 
    <button type="submit">Submit</button> 
 
</form>

2

あなただけyour custom selector"filePreviewImage"を交換し、それは関係なく、DIVのプレビューを移入します次のコードスニペット

$("#fileUploadInput").change(function(event){ 
 
    $("#filePreviewImage").attr('src',URL.createObjectURL(event.target.files[0])); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="fileUploadInput" type="file"> 
 
<img id="filePreviewImage" src="" alt="The image preview" height="90" width="160">

としてこれをachive。 ...

+0

これは一つの画像プレビューです。私は複数の画像プレビューが必要です。 –

+0

複数のファイル入力を使用していますか?複数の画像プレビューで何を意味しますか –

+0

私のスニペットをご覧ください。 –

関連する問題