jQuery .next() 不起作用,元素保持为空

Posted

技术标签:

【中文标题】jQuery .next() 不起作用,元素保持为空【英文标题】:jQuery .next() not working, element stays empty 【发布时间】:2014-05-22 06:25:42 【问题描述】:

我正在尝试使用 jQuery .next()html 添加到 div,但我没有得到任何结果。

这是html部分:

<div class="widget widget_border">

  <h3 class="widget_border" id="widget_lot">Last opened tasks 
      <div class="dashboard_dd_arrow"></div>
  </h3>
  <div class="widget_content"></div>
</div>

javascript

(document).ready(function () 
  $('.widget h3').on('click', function () 
    if (!$.trim($(this).next('.widget_content').html())) 
      // if this widget don't have any data send ajax and load it

      var widget_id = $(this).attr('id');
      switch (widget_id) 
      case 'widget_lot':
        $.ajax(
          type: 'POST',
          url: '/dashboard/ajax_last_opened_tickets',
          data: ,
          success: function (data) 
            console.log(data);
            $(this).next('.widget_content').html('test');
          
        );
        break;
      
     else 
      // show current one
      $(this).next('.widget_content').slideToggle().parent().toggleClass('active');
    
  );
);

Ajax 调用顺利,我得到了所需的数据,但.next() 函数没有用widget_content 类填充div

对此有任何解决方案或想法吗?

谢谢。

【问题讨论】:

.children 不是 .next ,寻找当前元素之后的元素 我认为下一个很好,因为 op 正在从 h3 中查找 div.widget_content .. 这是下一个元素而不是子元素。 jsfiddle.net/rohitbatham/UEg38/2 【参考方案1】:

尝试在 ajax 调用之外缓存 $(this) 引用,并在其成功回调中使用它。喜欢,

 _this.next('.widget_content').html('test');

注意:以上代码中的_this 仅用于演示目的。

【讨论】:

@zinho 很高兴为您提供帮助..!如果您认为此答案对您有所帮助,请尝试单击此答案左上角的勾号。这不是强迫。 :)【参考方案2】:

你需要在子函数中备份这个

$('.widget h3').on('click', function()
    if( !$.trim($(this).next('.widget_content').html()) )
    
        // if this widget don't have any data send ajax and load it

        var widget_id = $(this).attr('id');
        var _this = this; // backup this
        switch (widget_id) 
            case 'widget_lot':
                $.ajax(
                    type:'POST',
                    url: '/dashboard/ajax_last_opened_tickets',
                    data:,
                    success:function(data)
                        console.log(data);
                        $(_this).next('.widget_content').html('test'); //edit here
                    
                );
                break;
        
    
    else 
        // show current one
        $(this).next('.widget_content').slideToggle().parent().toggleClass('active');
    
);

【讨论】:

【参考方案3】:

在您的 AJAX 函数中,$(this) 不是您认为的那样,因为它指的是成功函数/ajax 请求。你应该这样做:

var $self = $(this);
$.ajax(
     type:'POST',
     url: '/dashboard/ajax_last_opened_tickets',
     data:,
     success:function(data)
         console.log(data);
         $self.next('.widget_content').html('test');
     
);

希望这会有所帮助。

【讨论】:

【参考方案4】:

$(this) 内部成功指向当前方法而不是顶部方法。保存到变量中。

( document ).ready(function() 
$('.widget h3').on('click', function()
    var $this = $(this);
    if( !$.trim($this.next('.widget_content').html()) )
    
        // if this widget don't have any data send ajax and load it

        var widget_id = $this.attr('id');
        switch (widget_id) 
            case 'widget_lot':
                $.ajax(
                    type:'POST',
                    url: '/dashboard/ajax_last_opened_tickets',
                    data:,
                    success:function(data)
                        console.log(data);
                        $this.next('.widget_content').html('test');
                    
                );
                break;
        
    
    else 
        // show current one
        $this.next('.widget_content').slideToggle().parent().toggleClass('active');
    
);
);

【讨论】:

以上是关于jQuery .next() 不起作用,元素保持为空的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .next 不起作用

jQuery .next('div') 切换不起作用

为啥 next() 在 jquery 中不起作用

为啥我的带有“$(this).next”的 JavaScript/jQuery 脚本不起作用?

.next() 和 .addClass() 在 jquery 中不起作用

jquery next plus 切换不起作用。这是一个错误吗?