2017-06-21 53 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

相關問題