0

下面是一个函数,它控制文件在其自己的表行中完成上传后发生的任何事情。每个表行都包含一个文件输入,用户可以在其中上传文件,然后将文件名附加到它自己的表行中。

如果文件成功,则显示一条成功消息,如果上传不成功,则显示一条消息,说明存在错误。但是我在该功能中还有另一个功能,用户可以通过单击“删除”按钮来删除文件。我唯一的问题是这行代码:

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

假设我有 2 个表行,我在第一行删除了一个文件,.imagemsg 中的消息应该只显示在第一行,因为那是删除发生的行,它不应该在第一排和第二排。

所以我的问题是我需要添加什么,$(".imagemsg").html(data);以便消息仅显示在删除文件的行中,而不是.imagemsg每一行中的所有内容?

以下是完整代码:

function stopImageUpload(success, imagefilename){

      var result = '';

      if (success == 1){
         result = '<span class="imagemsg">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 class="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');

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

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


    });

      return true;   
}

回调函数:

 <script language="javascript" type="text/javascript">window.top.stopImageUpload(<?php echo $result ? 'true' : 'false'; ?>, '<?php echo $_FILES['fileImage']['name'] ?>');</script>

我听说最好这样做,但我不知道如何编码:

将相关元素传递给回调函数。您已经拥有 $(this),因此您可能可以从中获取正确的行并将其放入变量中,然后在回调中访问它以将结果放在正确的位置。

更新:

function stopImageUpload(success, imagefilename){

      var result = '';
      var counter = 0;
      counter++;

      if (success == 1){
         result = '<span class="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 class="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;   
}
4

2 回答 2

0

一种快速的方法是添加一个计数器,然后 .imagemsg 变为“.imagemsg”.$counter,然后返回的 msg 实际上只转到相关行 - 未经测试的代码,但你明白了。

例如

$counter++;
if (success == 1){ 
         result = '<span class="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 class="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'); 

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

    jQuery.ajax("deleteimage.php?imagefilename=" + image_file_name) 
      .done(function(data) { 
        $(".imagemsg".$counter).html(data); 
       }); 
于 2012-05-02T11:38:27.237 回答
0

如果您有不止一行带有imagemsg类,则您的代码

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

将其加载到所有这些中

要索引您的方式,您可以尝试

$(".imagemsg").eq(0).html(data);

第一个

演示

或者更改class="imagemsg"为每id="imagemsgN"行增加N且唯一的位置。然后你改变到$("#imagemsg"+counter)去得到它

于 2012-05-02T11:37:41.800 回答