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) 在数据部分起作用。
4

2 回答 2

1

您的上下文在.success()回调内部发生了变化,因此this引用的不是您期望的 jQuery 对象。

你可以这样做来解决它:

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

或者:

...
, success((function() {
    $(this).find(".yourClass").yourFunc();
}).bind(this));
于 2013-07-28T18:21:50.490 回答
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')因此,您可以使用其独特的选择器访问它。

另外,您的右括号错误,所以我为您更正了。

于 2013-07-28T19:06:22.367 回答