2017-05-25 20 views
0

私のコードは非常に長いです。私はここに皆さんを見せてくれません。私はちょうどのみアップロードした画像をどのボックスで削除するには?

私のjavascriptのこのようjavascriptのコードを示しています。私は、追加、削除、編集画像には、show非表示を使用しhttp://www.phpfiddle.org/main/code/adjv-sfuy

<script type="text/javascript"> 
    let current = 0; 
    for(let i = 0; i < 5; i++) { 
     $('#thumbnail-view-delete-'+i).click(function(){ 
      current -= 1; 
      $('input[name="photo-'+i+'"]').val(''); 
      document.getElementById("thumbnail-view-li-"+current).style.display = "none"; 
      document.getElementById("thumbnail-upload-li-"+current).style.display = ""; 
      document.getElementById("thumbnail-upload-li-"+(current+1)).style.display = "none"; 
      document.getElementById("thumbnail-slot-li-"+(current+1)).style.display = ""; 
     }); 
    } 

    var editClicked = false; 
    for(let i = 0; i < 5; i++) { 
     $('#thumbnail-view-edit-'+i).click(function(){ 
      editClicked = true; 
      $('input[name="photo-'+i+'"]').click(); 
     }); 
    } 

    for(let i = 0; i < 5; i++) { 
     $('#thumbnail-view-add-'+i).click(function(){ 
      editClicked = false; 
      $('input[name="photo-'+i+'"]').click(); 
     }); 
    } 

    for(let i = 0; i < 5; i++) { 
     var reader = new FileReader();  
     $('input[name="photo-'+i+'"]').change(function (e) { 
      let indexPhoto = i; 
      current += 1; 
      reader.onload = function(){ 
       imageProducIsLoaded(indexPhoto); 
      }; 
      reader.readAsDataURL(e.target.files[0]); 
     }); 
    } 

    function imageProducIsLoaded(indexPhoto) { 
     $('#thumbnail-view-'+indexPhoto).attr('src', reader.result); 
     if (!editClicked) { 
      document.getElementById("thumbnail-upload-li-"+indexPhoto).style.display = "none"; 
      document.getElementById("thumbnail-view-li-"+indexPhoto).style.display = ""; 
      if((indexPhoto+1) < 5) { 
       document.getElementById("thumbnail-upload-li-"+(indexPhoto+1)).style.display = ""; 
       document.getElementById("thumbnail-slot-li-"+(indexPhoto+1)).style.display = "none"; 
      } 
     } 
    }; 
</script> 

あなたはここに私の完全なコードとデモを見ることができます。あなたがデモを見れば、それは働いています。画像は、編集し、削除して

を追加しました。しかし、ユーザーが画像を削除すると私の問題は、ユーザが画像

を削除したときに、最後のボックス上の画像が削除されている。することができますユーザーが画像を削除すると、削除ボタンをクリックした画像が削除されます。

たとえば、私は5画像を入力します。 3に画像を削除する場合は、3への画像は、私はいくつかの日のためにコードを変更しようとしてきたが、私は解決策

が私を助けることができる誰もがあります見つけることができますか?

を削除しましたか

+0

..あなたを助ける、これを参照してください。 +記号。これは簡単で、実際にユーザーエクスペリエンスに影響を与えません。 –

+0

また、jQueryを使用している場合は、 'document.getElementBy'のようなことをするのではなく、jqueryに固執してみてください。' $( "#blah") 'を使用してください。また、divを表示/非表示にしている間に、現在のコードで物を移動させる効果を実際に得ることはできません。 –

+0

@A。ラウ、いいアイデアです。しかし、これは私のクライアント要求です。ジェイソンの答えを見てください。それは私の問題を軽減しました。しかし、まだ欠点があります。 –

答えて

1

複雑な作業を非常に簡単に行うためにjquery機能を使用します。

<?php 
if(isset($_POST['submit'])) { 
    echo "<pre>"; 
    print_r($_FILES); 
    for($i=0;$i<count($_FILES);$i++) { 

     if($_FILES['photo-'.$i]['error'] == 0) { 
      $file_name = $_FILES['photo-'.$i]['name']; 
      $file_tmp =$_FILES['photo-'.$i]['tmp_name']; 
      move_uploaded_file($file_tmp,"img/".$file_name); 
     } 
    } 
    echo "</pre>"; 
} 
?> 
<style type="text/css"> 
.img-container{width:162px;height:142px;border:1px dashed #337ab7;float:left;margin-right:5px;position:relative;border-radius:5px} 
.upload-add-product{position:absolute;display:block;margin:34% 42%} 
.upload-add-product i{font-size:30px} 
.img-container ul{list-style:none;bottom:0;position:absolute;width:100%;padding:0;margin:0;background-color:rgba(255,255,255,0.7)} 
.img-container ul li{display:inline;padding:0;display:table-cell;width:1%;text-align:center;position:relative;padding:2px 0} 
.img-container ul li:hover{background-color:#eee} 
.img-container ul li a{color:red} 
</style> 

<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> 
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"> 
<form method="post" enctype="multipart/form-data"> 

<div class="images-area"> 
<?php 
    for($i=0;$i<5; $i++) { ?> 
    <div class="img-container" id="box<?php echo $i ?>" data-status="0" data-index="<?=$i?>"> 
     <input type='file' name="photo-<?=$i?>" style="visibility: hidden;position:absolute;" id="upload-file<?=$i?>" class="upload-file"/> 
     <div class="image"> 
      <?php if ($i == 0): ?> 
       <a href="javascript:;" class="btn-click upload-add-product" onclick="$('#upload-file<?=$i?>').click()"><i class="fa fa-plus"></i></a> 
      <?php endif; ?> 
     </div> 
    </div> 

<?php } ?> 
</div> 
<input type="submit" name="submit" value="submit"> 
</form> 
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 
<script type="text/javascript"> 
    $(document).on('change',".upload-file",function() { 
     var $input = $(this); 
     var inputFiles = this.files; 
     if(inputFiles == undefined || inputFiles.length == 0) return; 
     var inputFile = inputFiles[0]; 
     var i = parseInt($(this).closest('.img-container').attr('data-index')); 
     var reader = new FileReader(); 
     reader.onload = function(event) { 
      // console.log($('#box'+i).find('img').length); 
      if($('#box'+i).find('img').length) { 
       $('#box'+i).find('img').attr('src',event.target.result); 
      } else { 
       var imgTmpl ='<img height="142" width="162" src='+event.target.result+'>'+ 
          '<ul><li class="btn-click" onclick=\'$("#upload-file'+i+'").click()\'><a href="javascript:;"><i class="fa fa-pencil"></i></a></li>'+ 
          '<li class="delete-button"><a href="javascript:;"><i class="fa fa-trash"></i></a></li></ul>'; 
       $('#box'+i+' .image').html(''); 
       $('#box'+i+' .image').append(imgTmpl); 
       $('#box'+i).attr('data-status',1); 

       $('#box'+(i+1)+' .image').html('<a href="javascript:;" class="btn-click upload-add-product" onclick=\'$("#upload-file'+(i+1)+'").click()\'><i class="fa fa-plus"></i></a>'); 

      } 
     }; 
     reader.onerror = function(event) { 
      alert("I AM ERROR: " + event.target.error.code); 
     }; 
     reader.readAsDataURL(inputFile); 
    }); 


    $(document).on('click','.delete-button',function(){ 
     var i = $(this).closest('.img-container').attr('data-index'); 
     $('#box'+i).remove(); 
     $('.images-area').append('<div class="img-container" data-status="0"><input type="file" style="display:none" id="upload-file" class="upload-file"><div class="image"></div></div>'); 
     var blank = 0; 
     $('.img-container').each(function(i){ 
      $(this).attr({'id':'box'+i,'data-index':i}); 
      $(this).find('.upload-file').attr({'id':'upload-file'+i,'name':'photo-'+i}); 
      $(this).find('.btn-click').attr('onclick','$("#upload-file'+i+'").click()'); 
      if(($(this).attr('data-status') == 0) && (blank == 0)) { 
       blank = i; 
      } 
     }); 
     if($('.img-container').find('.upload-add-product').length == 0) { 
      $('#box'+blank+' .image').append('<a href="javascript:;" class="btn-click upload-add-product" onclick=\'$("#upload-file'+blank+'").click()\'><i class="fa fa-plus"></i></a>'); 
     } 
    }); 
</script> 

私はあなたの仕事を理解するための努力を置く。..

それはあなただけのすべての空のボックスは `自分が表示されていない理由を私は得ることはありません

+0

素晴らしい。ありがとう。あなたの道がいいように見えます。私は私の場合に適用されます –

0

申し訳ありませんが、私は誤解しました。

あなたは、次の画像が表示されないことを確認する画像を削除した後で判断が必要です。

$('#thumbnail-view-delete-'+i).click(function(){ 
 
    $('input[name="photo-'+i+'"]').val(''); 
 
    document.getElementById("thumbnail-view-li-"+i).style.display = "none"; 
 
    document.getElementById("thumbnail-upload-li-"+i).style.display = ""; 
 
    if(document.getElementById("thumbnail-view-li-"+(i+1)).style.display === "none"){ 
 
     document.getElementById("thumbnail-upload-li-"+(i+1)).style.display = "none"; 
 
     document.getElementById("thumbnail-slot-li-"+(i+1)).style.display = ""; 
 
    } 
 
});

これは厄介をdescreaseすることができます。

+0

です。私の質問はよく読んでください。それに答える前に、まずそれを試してみてください。 –

0

私はあなたの問題を発見しました。あなたの削除機能は、現在アップロードされている写真の数を検出しませんが、単に最後の写真を削除します。

追加:現在の写真数、 'i'の代わりに現在の値を使用する削除方法を変更しました。アップロード時にカウントを増やし、削除時にカウントを増やします。私はだけではなく、画像をシフトhttp://phpfiddle.org/main/code/0h1g-mvus

<script type="text/javascript"> 
    let current = 0; 
    for(let i = 0; i < 5; i++) { 
     $('#thumbnail-view-delete-'+i).click(function(){ 
      current -= 1; 
      $('input[name="photo-'+i+'"]').val(''); 
      document.getElementById("thumbnail-view-li-"+current).style.display = "none"; 
      document.getElementById("thumbnail-upload-li-"+current).style.display = ""; 
      document.getElementById("thumbnail-upload-li-"+(current+1)).style.display = "none"; 
      document.getElementById("thumbnail-slot-li-"+(current+1)).style.display = ""; 
     }); 
    } 

    var editClicked = false; 
    for(let i = 0; i < 5; i++) { 
     $('#thumbnail-view-edit-'+i).click(function(){ 
      editClicked = true; 
      $('input[name="photo-'+i+'"]').click(); 
     }); 
    } 

    for(let i = 0; i < 5; i++) { 
     $('#thumbnail-view-add-'+i).click(function(){ 
      editClicked = false; 
      $('input[name="photo-'+i+'"]').click(); 
     }); 
    } 

    for(let i = 0; i < 5; i++) { 
     var reader = new FileReader();  
     $('input[name="photo-'+i+'"]').change(function (e) { 
      let indexPhoto = i; 
      current += 1; 
      reader.onload = function(){ 
       imageProducIsLoaded(indexPhoto); 
      }; 
      reader.readAsDataURL(e.target.files[0]); 
     }); 
    } 

    function imageProducIsLoaded(indexPhoto) { 
     $('#thumbnail-view-'+indexPhoto).attr('src', reader.result); 
     if (!editClicked) { 
      document.getElementById("thumbnail-upload-li-"+indexPhoto).style.display = "none"; 
      document.getElementById("thumbnail-view-li-"+indexPhoto).style.display = ""; 
      if((indexPhoto+1) < 5) { 
       document.getElementById("thumbnail-upload-li-"+(indexPhoto+1)).style.display = ""; 
       document.getElementById("thumbnail-slot-li-"+(indexPhoto+1)).style.display = "none"; 
      } 
     } 
    }; 
</script> 
+0

それは私が意味するものではありません。たとえば5枚の画像をアップロードした後、3枚目の画像を削除します。その後、3番目のボックスの画像が削除されます –

+0

実際にあなたの答えは私の問題を軽減しました。画像を削除すると、最後のボックスの画像は削除されます。画像を削除すると、削除ボタンをクリックした画像が削除されます –

+0

ええ、完全に修正されていないことがわかります。私はもう一度それを編集しようとしたときに私は近くになったが、私はリライトをお勧めします。コードは非常に面倒で、追跡するにはあまりにも多くの状態があります。 – Jason

0

は、ここに私の答えです。値を渡すかw/eを変更する必要があるかもしれません。

let current = 0; 
for(let i = 0; i < 5; i++) { 
    $('#thumbnail-view-delete-'+i).click(function(){ 
     current -= 1; 
     $('input[name="photo-'+i+'"]').val(''); 
     document.getElementById("thumbnail-view-li-"+current).style.display = "none"; 
     document.getElementById("thumbnail-upload-li-"+current).style.display = ""; 
     document.getElementById("thumbnail-upload-li-"+(current+1)).style.display = "none"; 
     document.getElementById("thumbnail-slot-li-"+(current+1)).style.display = ""; 
     shift_image(i); 
    }); 
} 

function shift_image(start) 
{ 
    let finish = 4; 
    for (; start < finish - 1; start++) 
    { 
     let next = $('#thumbnail-view-'+(start+1)).attr('src'); 
     $('#thumbnail-view-'+start).attr('src', next); 
    } 
} 
+0

ありがとう。まだ完璧ではないようだ。私は5枚の写真をアップロードしようとします。その後、私は最初の画像を削除し、私は削除された画像が最初の画像ではなく、5番目の画像を参照してください。削除された画像が最初の画像であるべきか –

+0

あなたのコード: 'for(; start

+0

これはオプションなので、 'for(;;)'を持つこともできます。無限ループを作るだけです。私は既に定義していたので何も定義する必要はありませんでした。 –

関連する問題