2013-03-21 32 views
1

考慮下面的jQuery:事件目標匹配但函數不被調用?

$('.entry-links:not(.entry-links-processed)').each(function(){ 
     $(this).addClass('entry-links-processed'); 
     $('li a', this).click(function(event){ 
      $target = $(event.target); 
      var tabPics = $('#tab-pics>a'); 
      if($target === tabPics){ 
       tabTest.getPics(); 
      } 
      $('.entry-links li a').removeClass('active'); 
      $(this).addClass('active'); 
      var id = $(this).attr('href'); 
      $('.entry-box:not(' + id + ')').hide(); 
      $(id).show(); 
      return false; 
     }); 
    }); 

我有三個標籤或菜單項:當你點擊一個,這個代碼會隱藏其他的內容部分。

出於這一點,以下部分是這個問題的重點:

    $target = $(event.target); 
      var tabPics = $('#tab-pics>a'); 
      if($target === tabPics){ 
       tabTest.getPics(); 
      } 

由於代碼片斷顯示,我試圖調用一個函數被點擊圖片選項卡時。在我的代碼中使用斷點後,我發現我成功捕獲了$ target,但即使它與tabPics匹配,函數調用也會被跳過,其餘代碼正常運行。

如果我已經匹配$ target和tabPics,爲什麼它會在我的if語句中遇到條件時跳過函數調用?

感謝您的幫助。

回答

0

我解決了這個問題。雖然我仍然認爲這個代碼應該工作:

 if($target === tabPics){ 
      tabTest.getPics(); 
     } 

它由於某種原因不......但使用.is()確實工作!所以現在代碼看起來像這樣:

  $target = $(event.target); 
      var tabPicsLi = $('#tab-pics'); 
      var tabPics = $('a', tabPicsLi); 
      if($target.is(tabPics)){ 
       tabTest.getPics(); 
      } 

它的工作原理與它應該一樣。也就是說,如果有人應該看到這篇文章,請查看我的原始代碼構造,看看爲什麼這種特殊的方式不起作用,我真的很感激答覆。從我的錯誤中學習對我來說是無價的。

0

您目前無法在jquery(.entry-link:not)中設置psuedo選擇器來設置CSS屬性。

+0

感謝您的回覆......我不認爲我是針對僞選擇器,是嗎?這個事件發生在'a'標籤上,tabPics存儲一個基於ID的元素和緊接着它的'a'標籤。我錯過了什麼嗎? – max7 2013-03-21 07:28:46

3

你原來的方式沒有工作,因爲你正在測試兩個不同的對象的平等:

var $target = $(event.target); 
var tabPics = $('#tab-pics>a'); 

當你調用jQuery的一個選擇或現有的DOM元素,它返回一個版本的本身包裹的元素它決定匹配。每當這個對象是不同的,所以下面的代碼:

if ($target === tabPics) { 
    /// this wont be reached 
} 

是一樣的話說:

if ({} === {}) { 
    /// neither will this 
} 

而且雖然上面的代碼兩個物體在視覺上看起來是一樣的,即使你:

if ({a:123} === {a:123}) { 
    /// nope... 
} 

的JavaScript仍將治療上述假,因爲使用===比較對象時的對象必須是完全相同的對象,它們不能被不同的對象機智h相同的內容。

下面的鏈接可以使用的:

How would you compare jQuery objects?

希望這清除了混亂。我可以看到你的邏輯在哪裏,而在另一種語言中它可能是有意義的,但測試對象時,並不是如何在JavaScript中工作。

+0

這是一個很好的解釋!非常感謝。 – max7 2013-04-03 17:30:38