2012-03-15 36 views
2

我有圖片列表事件從標準Flickr的API被拉扯,他們都走在這樣的名單:jQuery的未檢測(幾乎)所有的部分元素

<div id="listImgFlickr"> 
    <div id="jflickrwrap"> 
     <div class="listImgs-box"> 
      <div class="listImgs"> 
       <p style="display: none"></p> 
       <a class="thickbox" href="image.jpg" rel="index"><img src="image.jpg"></a> 
      </div> 
     </div> 
      <!-- rinse and repeat over and over --> 
    </div> 
</div> 

,我有這個jQuery腳本

jQuery("a").hover(function(){ 
     alert('maoe!'); 
}) 

事情是:腳本適用於頁面上的每個鏈接元素,除了列表中的鏈接元素。另一方面,Thickbox工作正常,這意味着它可以檢測到鏈接。

所以,我檢查了這一點:

  • 被列入jQuery的只有一次
  • 生成列表中的腳本是在標題
  • ThickBox的是頁腳
  • 測試腳本上面也是頁腳(在thickbox之後)。
  • 我還測試了腳本mouseovermouseenterclick,並將其設置爲"p""a.thickbox""img",仍然一無所獲。

任何線索?

+0

你有一個$(document).ready()處理程序嗎? – clem 2012-03-15 16:43:32

+0

是的,忘記提及 – moraleida 2012-03-15 16:44:02

+2

您是否嘗試過直播功能?像$(「a」)。live(「hover」,function(){...}); – Alfonso 2012-03-15 16:44:41

回答

1

如果你加載與AJAX這些元素,你應該使用.live()代替hover()
.live()已被棄用的1.7所以這取決於你用什麼樣的jQuery版本,可以考慮使用.on()代替。 more information here

1

你應該綁定的動作爲「A」,如果再添​​加新的「一個」動態

+0

但「a」僅在每頁加載時生成一次,並且在加載其他腳本之前......我是否需要再次綁定它? – moraleida 2012-03-15 16:46:27

+0

重要的是,在頁面中出現所有想要觸發該事件的「a」後,綁定該動作。 – kappa 2012-03-15 16:47:32

3

你應該使用一個代表團策略。附加的行爲,你知道會出現頁面加載時,這樣的容器元素:

$('#listImgFlickr').on('hover','a.thickbox', function(e){ // container? 
    if(e.type === 'mouseenter') { 
    alert('over!'); 
    } else { 
    alert('out!'); 
    } 
}); 

如果是動態創建#listImgFlicker,那麼你指定其父元素之一。

+0

+1不要使用.live()。它已被棄用。使用.on()像Ken的答案(這一個) – isotrope 2012-03-15 18:26:42