2016-08-08 7 views
1

入力タイプ= "file"から画像を選択してアップロードしたファイルをdivに表示する機能がありますが、問題は3つのように複数の入力ファイルが存在することです入力ファイル私はたくさん縛られていましたが、私が直面している問題は1画像しか表示されておらず、2画像は表示されていません。divにアップロードして表示するファイル

function head(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader = new FileReader(); 
 

 
    reader.onload = function(e) { 
 
     $('#head_shot').attr('src', e.target.result); 
 
    } 
 

 
    reader.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#head").change(function() { 
 
    head(this); 
 
}); 
 

 
function side_profile(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader = new FileReader(); 
 

 
    reader.onload = function(e) { 
 
     $('#side_profile').attr('src', e.target.result); 
 
    } 
 

 
    reader.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#side_profile").change(function() { 
 
    side_profile(this); 
 
}); 
 

 

 
function full(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader3 = new FileReader(); 
 

 
    reader3.onload = function(e) { 
 
     $('#full').attr('src', e.target.result); 
 
    } 
 

 
    reader.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#full").change(function() { 
 
    full(this); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="img-sec"> 
 
    <div class="container"> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>head shot</h4> 
 
     <img id="head_shot" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>Side Profile</h4> 
 
     <img id="side_profile" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>Full Length</h4> 
 
     <img id="full" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div> 
 

 
<div class="picture_sec"> 
 
    <div class="container"> 
 
    <div class="lb-put"> 
 
     <label>Head Shot</label> 
 
     <input type="file" class="form-control" name="head" id="head"> 
 
    </div> 
 

 
    <div class="lb-put"> 
 
     <label>Side Profile</label> 
 
     <input type="file" class="form-control" name="side_profile" id="side_profile"> 
 
    </div> 
 

 
    <div class="lb-put"> 
 
     <label>Full Length</label> 
 
     <input type="file" class="form-control" name="full" id="full"> 
 
    </div> 
 
    </div> 
 
</div>

答えて

2

それはあなたのファイル入力のIDのとでは、競合ですので、私は別の値にあなたのイメージフィールドのIDを変更するあなたの問題を解決するには。

General Rule : You cannot have elements with the same ID in DOM

function head(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader = new FileReader(); 
 

 
    reader.onload = function(e) { 
 
     $('#head_shot-img').attr('src', e.target.result); 
 
    } 
 

 
    reader.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#head").change(function() { 
 
    head(this); 
 
}); 
 

 
function side_profile(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader = new FileReader(); 
 

 
    reader.onload = function(e) { 
 
     $('#side_profile-img').attr('src', e.target.result); 
 
    } 
 

 
    reader.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#side_profile").change(function() { 
 
    side_profile(this); 
 
}); 
 

 

 
function full(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader3 = new FileReader(); 
 

 
    reader3.onload = function(e) { 
 
     $('#full-img').attr('src', e.target.result); 
 
    } 
 

 
    reader3.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#full").change(function() { 
 
    full(this); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="img-sec"> 
 
    <div class="container"> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>head shot</h4> 
 
     <img id="head_shot-img" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>Side Profile</h4> 
 
     <img id="side_profile-img" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>Full Length</h4> 
 
     <img id="full-img" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div> 
 

 
<div class="picture_sec"> 
 
    <div class="container"> 
 
    <div class="lb-put"> 
 
     <label>Head Shot</label> 
 
     <input type="file" class="form-control" name="head" id="head"> 
 
    </div> 
 

 
    <div class="lb-put"> 
 
     <label>Side Profile</label> 
 
     <input type="file" class="form-control" name="side_profile" id="side_profile"> 
 
    </div> 
 

 
    <div class="lb-put"> 
 
     <label>Full Length</label> 
 
     <input type="file" class="form-control" name="full" id="full"> 
 
    </div> 
 
    </div> 
 
</div>

これは、私は問題なくJquery Multifileを使用してい提案

です。

  1. プラグインを使用すると、1つのファイルまたは複数のファイルをアップロードすることができます。 アップロードのすべてのバッチがグループ化され、クローズボタンが割り当てられているため、特定のファイルのみを削除できます。
  2. 次の素晴らしい機能は画像のプレビューです。選択したすべてのファイルを通じて
+0

私が試したが、私のシナリオでは、3種類のファイルがアップロードされるように、私のために働いていませんでしたそれは複数ではありませんし、画像のプレビューのための主な理由であり、ライブラリのconfliclationのために私はより多くのlibを使用する必要がありません –

+0

は3つのファイルを同時にアップロードしていますか? – Sherlock

+0

はい私のスニペットコードを実行して、同じことが起こっているのは同じですが、フルボディ画像のような異なるフィールドの画像やその他の入力フィールドを持つ画像は3つだけです。理解する方法はありません –

1
  1. ループが
  2. が撮影した容器内の各画像のための新しいimg要素を追加し、ファイルごとに新しいリーダーを作成し、現在のファイルの内容として、新しいイメージのSRCを割り当てる

をご覧ください。Working Demo at plunker

function showSelectedPhotoes(input) { 

    if(!input.files) 
    return; 

    for(i=0;i<input.files.length;i++) 
    { 

    var reader3 = new FileReader();  
    reader3.onload = function(e) { 
     $('#all_photoes_container').append('<img width="100" height="100" src='+e.target.result+' />') 
    }; 
    reader3.readAsDataURL(input.files[i]); 
    }   
} 
+0

可能であれば私のスピネットコードに従って更新してください。イメージのプレビューは異なるdivの入力タイプファイルは別の部門にあります –

+0

@MarkAlan。 jsデモ用のplunkerを好む方は、外部リソースを追加して実行を完了させてください。今すぐ自分のコードをチェックしてください。希望の説明 – Sami

1

一見すると、ID競合です。最初の画像選択では、imgの場合はid="head_shot"、ボタンの場合はid="head"です。 idsが異なるため、うまく動作します。しかし、後で画像とボタンの両方にid="side_profile"があるので、スクリプトは同じidを持つ2番目の要素を単に無視します。

function head(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader = new FileReader(); 
 

 
    reader.onload = function(e) { 
 
     $('#head_shot').attr('src', e.target.result); 
 
    } 
 

 
    reader.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#head").change(function() { 
 
    head(this); 
 
}); 
 

 
function side_profile(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader = new FileReader(); 
 

 
    reader.onload = function(e) { 
 
     $('#side_profile').attr('src', e.target.result); 
 
    } 
 

 
    reader.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#side_profile2").change(function() { 
 
    side_profile(this); 
 
}); 
 

 

 
function full(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader3 = new FileReader(); 
 

 
    reader3.onload = function(e) { 
 
     $('#full').attr('src', e.target.result); 
 
    } 
 

 
    reader3.readAsDataURL(input.files[0]); 
 
    } 
 
} 
 

 
$("#full2").change(function() { 
 
    full(this); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="img-sec"> 
 
    <div class="container"> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>head shot</h4> 
 
     <img id="head_shot" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>Side Profile</h4> 
 
     <img id="side_profile" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    <div class="col-sm-4"> 
 
     <div class="img-box"> 
 
     <h4>Full Length</h4> 
 
     <img id="full" src="#" alt="your image" /> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div> 
 

 
<div class="picture_sec"> 
 
    <div class="container"> 
 
    <div class="lb-put"> 
 
     <label>Head Shot</label> 
 
     <input type="file" class="form-control" name="head" id="head"> 
 
    </div> 
 

 
    <div class="lb-put"> 
 
     <label>Side Profile</label> 
 
     <input type="file" class="form-control" name="side_profile2" id="side_profile2"> 
 
    </div> 
 

 
    <div class="lb-put"> 
 
     <label>Full Length</label> 
 
     <input type="file" class="form-control" name="full" id="full2"> 
 
    </div> 
 
    </div> 
 
</div>

PS:ここでは固定バージョンです。最後の関数のreader3変数にタイプミスがありました。ある時点で "3"を失ってしまいました。

0

You can see updated and optimized code Here... I have optimized your code with html and jquery changes that's very useful for you. and you can upload multiple files as well.

HTMLコード

<div class="img-sec"> 
    <div class="container"> 
     <div class="col-sm-4"> 
     <div class="img-box"> 
      <h4>head shot</h4> 
      <div id="head_shot"></div> 
     </div> 
     </div> 
     <div class="col-sm-4"> 
     <div class="img-box"> 
      <h4>Side Profile</h4> 
      <div id="side_profile"></div> 
     </div> 
     </div> 
     <div class="col-sm-4"> 
     <div class="img-box"> 
      <h4>Full Length</h4> 
      <div id="full_length"></div> 
     </div> 
     </div> 
    </div> 
</div> 
<div class="picture_sec"> 
    <div class="container"> 
     <div class="lb-put"> 
     <label>Head Shot</label> 
     <input type="file" class="form-control" name="head_shot" id="head" multiple> 
     </div> 
     <div class="lb-put"> 
     <label>Side Profile</label> 
     <input type="file" class="form-control" name="side_profile" id="side" multiple> 
     </div> 
     <div class="lb-put"> 
     <label>Full Length</label> 
     <input type="file" class="form-control" name="full_length" id="full" multiple> 
     </div> 
    </div> 
</div> 

あなたのjQueryコード:

$('input[type="file"]').change(function() { 
    var elemPreview = '#' + $(this).attr('name'); 
    var elemChange = $(this); 
    fileupload(elemChange, $(elemPreview)); 
}); 

function fileupload(elemChange, elemPreview) { 
    if (typeof(FileReader) != "undefined") { 
     var dvPreview = elemPreview; 
     dvPreview.html(""); 
     var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.jpg|.jpeg|.gif|.png|.bmp)$/; 
     $(elemChange[0].files).each(function() { 
      var file = $(this); 
      if (regex.test(file[0].name.toLowerCase())) { 
       var reader = new FileReader(); 
       reader.onload = function(e) { 
        var img = $("<img />"); 
        img.attr("style", "height:100px;width: 100px"); 
        img.attr("src", e.target.result); 
        dvPreview.append(img); 
       } 
       reader.readAsDataURL(file[0]); 
      } else { 
       alert(file[0].name + " is not a valid image file."); 
       dvPreview.html(""); 
       return false; 
      } 
     }); 
    } else { 
     alert("This browser does not support HTML5 FileReader."); 
    } 
} 
関連する問題