2017-02-03 6 views
2

ここで間違っている人はいますか? console.logでは750または2000のいずれかを返しますが、私の状況ではアイコンを見つけてアイコンクラスを追加していないようです。これ以上クリックされた要素を参照するの成功コールバックの内側jQuery this find selector does not working

JS

$("a.image-select").click(function(){ 

    $('.loading').show(); 
    selectedImage = $(this).data('image'); 
    $("a.image-select").removeClass('selected'); 
    $(this).addClass('selected'); 
    $('.image-warning').hide(); 
    $(".image-original").attr('src', "imgd.php?src="+selectedImage+"&quality=100&w=500&h=500&cf"); 
    $(".image-optimised").attr('src', "imgd.php?src="+selectedImage+"&quality=100&w=500&h=500&cf"); 

    $.ajax({ 
     url: "imgd.php?src="+selectedImage+"&quality=100&json", 
     dataType: "json" 
    }).success(function(data){ 
     $('.image-details-quality').html('100'); 
     var sizeInMB = (JSON.stringify(data['size'])/(1024*1024)).toFixed(2); 
     var sizeInKB = (JSON.stringify(data['size'])/1024).toFixed(2); 
     $('.image-details-size').html(sizeInMB + 'mb' + '/' + sizeInKB + 'kb'); 
     $('.image-details-dims').html(data['width'] + 'px' + ' x ' + data['height'] + 'px'); 
     $('.image-details-type').html(data['mimeType']); 
     // if image is more than 2000 show error 
     if(data['width'] > 2000){ 
      $('.image-warning').show(); 
     } 
     // set thumbnail icons 
     if(data['width'] == 2000){ 
      $(this).find('span.device-icon').addClass('glyphicon-phone'); 
     } else if(data['width'] == 750) { 
      $(this).find('span.device-icon').addClass('glyphicon-blackboard'); 
     } 
     console.log(data['width']); 
     $('#slider').slider('refresh'); 
     $('.image-details').show(); 
     $('.loading').hide(); 
    }); 

}); 

この部分問題の

// set thumbnail icons 
if(data['width'] == 2000){ 
    $(this).find('span.device-icon').addClass('glyphicon-phone'); 
} else if(data['width'] == 750) { 
    $(this).find('span.device-icon').addClass('glyphicon-blackboard'); 
} 

HTML例

<a href="#" data-image="LUXE-ESSENTIALS-MOB.jpg" class="image-select selected"> 
    <span class="select-icon glyphicon glyphicon-ok-circle"></span> 
     <img src="imgd.php?src=LUXE-ESSENTIALS-MOB.jpg&amp;quality=100&amp;width=80&amp;height=80&amp;crop-to-fit" data-pin-nopin="true"> 
    <span class="device-icon glyphicon"></span> 
</a> 
+0

コールバックの中で、これはAjax呼び出しのjqXHRオブジェクトを参照し、イベントハンドラがバインドされた要素を参照しません。http://stackoverflow.com/questions/6394812/this-inside-of-ajax-success-not –

答えて

7

$(this)、あなたがすべき変数に保存してから、コールバック内で使用してください:

var _this = $(this); 

$.ajax({ 
    url: "imgd.php?src="+selectedImage+"&quality=100&json", 
    dataType: "json" 
}).success(function(data){ 
    ... 
    // set thumbnail icons 
    if(data['width'] == 2000){ 
     _this.find('span.device-icon').addClass('glyphicon-phone'); 
    } else if(data['width'] == 750) { 
     _this.find('span.device-icon').addClass('glyphicon-blackboard'); 
    } 
    ... 
}); 

あるいはまた、あなたは、コンテキストを使用することができます好きな属性:

$.ajax({ 
    context: this, 
    url: "imgd.php?src="+selectedImage+"&quality=100&json", 
    dataType: "json" 
    success: function(response){ 
     //You can use $(this) now 
    } 
}); 

・ホープ、このことができます。

+0

「これは正解です」とお詫び申し上げます。 – G0dsquad

+0

また、コールバックのコンテキストも宣言することができます。 – scrappedcola

+0

はい@scrappedcolaも​​可能です。 –