2016-09-13 12 views
0

私は次のコードを開発しました。このクラスのアイテムがたくさんあるため、正確なthis値をajaxの成功関数に渡す必要があります。どうやってするか。ajaxの成功関数を渡す

$(document).on('click', '.address_remove_link', function(e) { 
    var id = $(this).attr("data-id"); 
    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response, this) { 
      $(this).parent().closest('div').hide(200); 
     }, 
     error: function(data) { 
      console.log("error"); 
     } 
    }); 
}); 
+0

'this'は常に呼び出しを指し、現在のスコープのオブジェクト。外側スコープにアクセスするには、典型的な方法は、[this article]で示されるように、 'var this == 'や' var self = this; 'や' //jsforallof.us/2014/07/08/var-that-this/)。 – SNag

+0

@SNag:* "' 'これは常に現在のスコープ内の呼び出し元オブジェクトを参照します。* *いいえ、それはありません。非矢印のバインドされていない関数の場合、 'this'は呼び出しコードが意味するものを何でも意味します。 –

答えて

1

ので、問題があります範囲thisは、successハンドラ関数内で変更されました。代わりにクリックハンドラ関数に外側スコープを格納することができます。これを試してみてください:

$(document).on('click', '.address_remove_link', function(e) { 
    var $link = $(this); // store reference here 
    var id = $link.attr("data-id"); 

    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response) { 
      $link.parent().closest('div').hide(200); // to use here 
     }, 
     error: function(data) { 
      console.log("error"); 
     } 
    }); 
}); 
+0

'成功'関数から 'this'パラメータを削除する方がいいです –

+1

@YosvelQuinteroああ、ありがとう。私はそこにいても見なかった –

0

一つの簡単な方法は、関数がオーバー閉じ変数を使用することです:

$(document).on('click', '.address_remove_link', function(e) { 
    var $this = $(this);         // *** 
    var id = $this.attr("data-id");      // *** 
    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response) { 
      $this.parent().closest('div').hide(200);  // *** 
     }, 
     error: function(data) { 
      console.log("error"); 
     } 
    }); 
}); 

代わりにあなたがFunction#bindMDNspec)を使用することができます

$(document).on('click', '.address_remove_link', function(e) { 
    var id = $(this).attr("data-id"); 
    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response) { 
      $(this).parent().closest('div').hide(200); 
     }.bind(this),          // *** 
     error: function(data) { 
      console.log("error"); 
     } 
    }); 
}); 
+0

あなたの回答も正しい – hogard

0

あなたがself変数を作成し、このようにそれを使用することができますので、あなたは、クリックイベントハンドラ関数のスコープに取り組んでいる:

$(document).on('click', '.address_remove_link', function(e) { 
    var self = $(this), 
     id = self.attr('data-id'); 

    $.ajax({ 
     type: 'POST', 
     url: 'inc/controlllers/detele_shipping_addr.php', 
     data: { 
      internalId: id 
     }, 
     success: function(response) { 
      // Do something with "response" 
      self.parent().closest('div').hide(200); 
     }, 
     error: function(data) { 
      console.log('error'); 
     } 
    }); 
}); 
関連する問題