2017-06-21 56 views
0

我试图找出为什么我的$(this)从jQuery是不是在这种情况下工作:

<ul>     
    <li class="tabs-li-js ui-tabs-tab ui-tabs-active"> 
     <a href="#fragment-1" class="anchor-tabs" id="ui-id-1">Online Investing</a> 
    </li> 

    <li class="tabs-li-js ui-tabs-tab"> 
     <a href="#fragment-2" class="anchor-tabs" id="ui-id-2">Guided Investing</a> 
    </li>    
</ul> 

这是js函数:

var $tabsLiJs = $('.tabs-li-js'); 
var productDescriptionMob = function() { 
    $tabsLiJs.on('click', function(e) { 
     e.preventDefault(); 
     $tabsLiJs.each(function(i, el) { 
      if ($(el).hasClass('ui-tabs-active')) { 
       $('[data-action="show'+i+'"]').show(); 
      } else { 
       $('[data-action="show'+i+'"]').hide(); 
      } 
     }); 

    }); 
}; 

上面是这样的完美的作品。

正如你所看到的,在第二行有一个元素:$tabsLiJs它有一个点击事件。然后,在.each功能是我正在尝试添加$(this)的情况下的问题。但它不起作用。

我想使用这个位置:

$(this).each(function(i, el) { 
    if ($(el).hasClass('ui-tabs-active')) { 
      $('[data-action="show'+i+'"]').show(); 
    } else { 
      $('[data-action="show'+i+'"]').hide(); 
    } 
}); 

什么可能呢? 有什么建议吗?

+3

没有'$(本)'在你的代码。此外,“不工作”是什么意思? – empiric

+0

productDescriptionMob是否已从您的文档中调用? – Korgrue

+0

'this'假设参考什么? – Hoyen

回答

1

尽管$tabsLiJS是一个jquery对象,其中包含所有带有给定类名的DOM对象,但点击函数中的this只会引用实际单击的元素。

0

只要改变你的如下功能:

$('.tabs-li-js').each(function(i, el) { 
    if ($(el).hasClass('ui-tabs-active')) { 
      $('[data-action="show'+i+'"]').show(); 
    } else { 
      $('[data-action="show'+i+'"]').hide(); 
    } 
}); 
0

在这种情况下, “this” 关键字是指的在 “productDescriptionMob” 对象。

的 “本” 关键字的Javascript中被定义4点可能的方式:

1 - 全球背景。当关键字“this”不在声明的对象内时,它被认为是在全局范围内,其值是全局对象(在大多数情况下是窗口对象)。

2 - 隐式/对象:当关键字“this”位于声明对象内时,它的值将是最接近的父对象声明。

3 - 显式绑定:当使用方法“call”,“apply”或“bind”时,第一个参数定义关键字“this”在函数内部的值。新对象:当关键词“this”位于一个在其之前使用关键字“new”调用的函数内部时,“this”关键字将引用新创建的对象。

您的代码在第二种情况下设置为Implicit/Object。这意味着,由于在关键字“this”之前声明的最接近的父对象是“productDescriptionMob”对象,所以它是它的值。

更多信息可以在这里找到:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this

相关问题