2

How can I access the value of $(this) after success: function() when using jquery? No matter what I've tried, it appears I cant do it.

$('.add').click(function() {
//etc etc
    $.ajax({
            type:"GET",
            url:"/",
            data:data,
            dataType: 'json',
            beforeSend:function(html){
                //Nothing here right now
            },
            success: function(){
                $(this).parent("div").after("<div class='flag'>I'm the new one.</div>");
            },

<div id="container">

    <div class="h1" data-id="1">Teachers <span class="add" data-id="US01">Add New</span></span>
    </div>
    <div class="flag">Flag</div>
    <div class="edit">Edit</div>
    <div class="h2" data-id="2">Who is your favorite Math teacher? <span class="add" data-id="US02">Add New</span></div>
    <div class="flag">Flag</div>
    <div class="edit">Edit</div>
        <br>
    <div class="h1" data-id="8">Restaurants <span class="add" data-id="US10">Add New</span></div>
    <div class="flag">Flag</div>
    <div class="edit">Edit</div>
    <div class="h2" data-id="9">Which is your favourtie restaurant in town? <span class="add" data-id="US20">Add New</span></div>
    <div class="flag">Flag</div>
    <div class="edit">Edit</div>

</div>
4

3 に答える 3

4

thisajax 呼び出しを行う前に変数に保存し、代わりにそれを使用します。

$('.add').click(function() {
    var self = this; // save this as self
    //etc etc
    $.ajax({
            type:"GET",
            url:"/",
            data:data,
            dataType: 'json',
            beforeSend:function(html){
                //Nothing here right now
            },
            success: function(){
                // use self instead of this
                $(self).parent("div").after("<div class='flag'>I'm the new one.</div>");
            },
于 2013-09-06T14:30:15.070 に答える
3

あなたの ajax 成功の内側の「これ」は、外側の「これ」と同じではありません。

さまざまなスコープ...

この質問には良い解決策があります。

$('.add').click(function() {
var that = $(this);
//do whatever you want :]

 $.ajax({
        type:"GET",
        url:"/",
        data:data,
        dataType: 'json',
        beforeSend:function(html){
            //Nothing here right now
        },
        success: function(){
            that.parent("div").after("<div class='flag'>I'm the new one.</div>");
        },

  });
});
于 2013-09-06T14:33:09.327 に答える
0

これはスコープの問題です。thisアクセス可能な範囲内で変数に割り当てる必要があります。次に、その変数を子関数で使用します。

使用したメモ_that

これは機能するはずです。機能しない場合はコメントしてください。

 $('.add').click(function() {
    var _that = this;
    $.ajax({
        type:"GET",
        url:"/",
        data:data,
        dataType: 'json',
        beforeSend:function(html){
            //Nothing here right now
        },
        success: function(){
            $(_that).parent("div").after("<div class='flag'>I'm the new one.</div>");
        },
    });
 });
于 2013-09-06T14:33:24.280 に答える