0

ユーザーが「削除」ボタンをクリックすると、ファイルが削除されたことを示すメッセージが表示される機能内に削除機能があります。これを行うコードは次のとおりです。

$("#imagemsg").html(data);

しかし、問題は、4 つのテーブル行があり、3 行目のファイルを削除すると、メッセージは 3 行目にのみ表示されるはずですが、代わりに最初の行に表示されることです。別の例として、8 つのテーブル行があり、6 行目のファイルを削除すると、メッセージは 6 行目にのみ表示されるはずですが、代わりに最初の行に表示されます。

ファイルが削除された後に表示されるはずのメッセージが、ファイルが削除された行ではなく常に最初の行に表示されるのはなぜですか?

以下は完全なコードです。

 var counter = 0;
      counter++;

function stopImageUpload(success, imagefilename){

      var result = '';

      if (success == 1){
         result = '<span id="imagemsg'+counter+'">The file was uploaded successfully!</span><br/><br/>';      
         $('.listImage').eq(window.lastUploadImageIndex).append('<div>' + htmlEncode(imagefilename) + '<button type="button" class="deletefileimage" image_file_name="' + imagefilename + '">Remove</button><br/><hr/></div>'); 
      }
      else {
         result = '<span id="imageemsg">There was an error during file upload!</span><br/><br/>';
      }


      $(".deletefileimage").on("click", function(event) {

         var image_file_name = $(this).attr('image_file_name');

    jQuery.ajax("deleteimage.php?imagefilename=" + image_file_name)
      .done(function(data) {
        $("#imagemsg" + counter).html(data);
       });

       $(this).parent().remove();

    });

      return true;   
}

以下は、削除メッセージが取得される deleteimage.php スクリプトです。

<?php
  $image_file_name = $_GET["imagefilename"];

    echo "$image_file_name was Deleted";
    unlink("ImagesFilesFolder/$image_file_name");


?>
4

1 に答える 1

0

問題は次のようです。

.done(function(data) {
    $("#imagemsg" + counter).html(data);

counterこのように設定します

var counter = 0;
counter++;

しかし、変数を再び参照することはないようです。いずれにせよ、この変数はグローバルです。上記のコマンドは、常にカウンターの現在の番号を持つ ID をターゲットにtrするため、クリックされたボタンに対応する をターゲットにしません。

使っているので

$(this).parent().remove();

私は親がtr関係していると思いますか?この場合、ID 'imagemsg' の代わりにクラスを使用して、

$(this).parent().find(".imagemsg").html(data);

これは、ボタンの同じ行内のメッセージをターゲットにします。

于 2012-05-03T16:40:36.370 に答える