2013-07-28 41 views
0
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script> 
var commentUrl = 'comment.jsp'; 

$('.privateTimeline').click(function() { 
$.ajax({ 
url: commentUrl, 
type:'post', 
    data:{ 
     no : $(this).find('.no').text() // working! 
}, 
success:function(data){ 
    if($(this).children('.comment').is(':hidden')) { // not working! 
    $(this).find('.comment').slideDown(400); // not working! 
    $(this).find('.comment').html(data); // not working! 
} 
else { 
    $(this).find('.comment').slidUp(400); // not working! 
    } 
}); 
}) 

</script> 
  1. 我不知道原因比這段代碼不工作。
  2. 我想選擇privateTimeline的子類節點,所以做事件。
  3. 不能在成功函數部分工作,但$(this)在數據部分工作。

回答

1

這應該工作:

var $target =$('.privateTimeline'); 
$target.click(function() { 
    $.ajax({ 
     url: commentUrl, 
     type:'post', 
     data:{ 
      no : $(this).find('.no').text() // working! 
     }, 
     success:function(data){ 
      if($target.children('.comment').is(':hidden')) { // not working! 
       $target.find('.comment').slideDown(400); // not working! 
       $target.find('.comment').html(data); // not working! 
      } 
      else { 
       $target.find('.comment').slidUp(400); // not working! 
      } 
     } 
    }); 
}); 

success:function(data){}$(this)犯規點$('.privateTimeline')了。所以你使用它獨特的選擇器來訪問它。

另外,你的右括號錯了,所以我糾正了你的錯誤。

+1

這樣做會多次運行選擇器。你可以將它存儲在一個變量中以優化'var $ pTimeline = $(「。privateTimeline」)'然後使用該變量。 – mash

+0

是的,感謝Mash。我編輯它。 – DoubleCute

1

您的上下文在.success()回調中發生了變化,因此this引用的是除您期望的jQuery對象之外的其他內容。

你可以做這樣的事情來解決這個問題:

var _this = this; 
... 
, success(function(){ 
    $(_this).find(".yourClass").yourFunc() 
}); 

或者:

... 
, success((function() { 
    $(this).find(".yourClass").yourFunc(); 
}).bind(this));