2016-04-05 9 views
0

jQueryで同じコードを複数回実行する必要があるため、自分のjQuery関数を作成することにしました。 (この$ "成功の機能で、ここでそれを使用しながら、「これは」間違ったインスタンスを参照するように思われること、jQueryカスタム関数が間違っている "this" reference

   jQuery.fn.extend({ 
       fooFunction: function() { 
        $.ajax({ 
         type: "POST", 
         cache: false, 
         url: "includes/thescript.php", 
         success: function (data) 
         { 
          $(this).html(data); 
         }, complete: function() { 
          // do sth 
         } 
        }); 
        return $(this); 
       } 
      }); 

をしかし、今、私は問題を抱えている:

それはこれまでのところ、このようになります。 ).html(data); "となります。

私は代わりにというIDを使用します。 $( "#TheID").html(data);それはうまくいくが、なぜ「これ」ではないのだろうか?私は関数を呼び出す:。間

jQueryのAjaxのコールバックで $( "#のTheID")fooFunction()

+1

可能な複製をhttp://stackoverflow.com([$(この)動作していないAJAXの成功の内側]/questions/6394812/this-inside-of-ajax-success-not-working) –

答えて

2

問題は、あなたがsuccessパラメータに提供匿名関数の中にいるときthisの範囲が変化することです。問題を解決するには、このように、変数に外側のスコープからthis参照を格納することができますの

jQuery.fn.extend({ 
    fooFunction: function() { 
     var $el = $(this); 
     $.ajax({ 
      type: "POST", 
      cache: false, 
      url: "includes/thescript.php", 
      success: function (data) { 
       $el.html(data); 
      }, 
      complete: function() { 
       // do something 
      } 
     }); 
     return $el; 
    } 
}); 
0

、 "このは" で使用されるオプションへの参照でありますajaxリクエスト。これはDOM要素への参照ではありません。詳細については

は、関数キャッシュ$(this)の開始時に、このリンク$(this) inside of AJAX success not working

0

を訪問して、代わりにそれを使用します。

thisは、関数コンテキストの関数参照で、対象となる要素ではありません。

これを試してください。

jQuery.fn.extend({ 
    fooFunction: function() { 
     var $this = $(this); 
     $.ajax({ 
      type: "POST", 
      cache: false, 
      url: "includes/thescript.php", 
      success: function (data) 
      { 
       $this.html(data); 
      }, complete: function() { 
       // do sth 
      } 
     }); 
     return $this; 
    } 
}); 
関連する問題