7

誰かがアドバイスできることを願っています。リンクがクリックされた後、行を削除しようとすると問題が発生します。

HTML

<table>
  <tr><td>Some Data</td><td><a href="#" class="remove-row>Remove Row</a></td></tr>
  <tr><td>Some Data</td><td><a href="#" class="remove-row">Remove Row</a></td></tr>
</table>

今JS

 $("a.remove-row").live('click', function(eve){
  eve.preventDefault();
  $.ajax({
   type: 'GET',
   url: '/someaction/',
   dataType: 'json',
   success: function(msg){
    if(msg.error){
     alert(msg.error);
    }else{
     $(this).closest('tr').remove();
     alert(msg.success);
    }    
   }
  })
 });

これは本当に単純なはずですが、行を削除するわけではありません。私がそれを次のようなものに変更した場合のキックのためだけに

$('.remove-row').addClass('foo');

すべてのテーブル行にfooが追加されます。したがって、最も近い行を削除しない理由を理解できます。

何か案は ?

よろしくお願いします。

4

4 に答える 4

19

問題はthis現在、コールバック内のajaxオブジェクトに関連してsuccessいますが、簡単に修正できます。次のcontentようなオプションを使用してください。

 $("a.remove-row").live('click', function(eve){
  eve.preventDefault();
  $.ajax({
   context: this,                    //add this here!
   type: 'GET',
   url: '/someaction/',
   dataType: 'json',
   success: function(msg){
    if(msg.error){
     alert(msg.error);
    }else{
     $(this).closest('tr').remove();
     alert(msg.success);
    }    
   }
  })
 });

このcontextオプションthisは、コールバック関数に何を含めるかを指定します。クリックした$.ajax()ものにしたいので、オプションとして使用します。.remove-rowthis

于 2010-08-23T15:00:10.767 に答える
2

ニックの答えはうまくいくはずですが、これもできます。どちらが良いかわかりません。おそらくニックの答えですが、とにかく役立つかもしれません...

$("a.remove-row").live('click', function(eve){
  var row = this;
  eve.preventDefault();
  $.ajax({
   type: 'GET',
   url: '/someaction/',
   dataType: 'json',
   success: function(msg){
    if(msg.error){
     alert(msg.error);
    }else{
     $(row).closest('tr').remove();
     alert(msg.success);
    }    
   }
  })
 });
于 2010-08-23T15:05:09.457 に答える
0

class="remove-row最初の行に閉じられていない属性があります。

こちらをご覧ください

于 2010-08-23T15:02:52.753 に答える
0

事前に削除/非表示を行う方が簡単ではないでしょうか?

このような :

$("a.remove-row").live('click', function(eve){
      $(this).hide();
      <The rest of your code logic>
         ......
于 2010-08-23T16:43:10.500 に答える