2013-02-15 23 views
0

在嘗試使用hashchange並找出它在Internet Explorer中無法正常工作後,我決定嘗試使用click()方法。下面應該做的是當點擊鏈接時,檢查url是否包含頁面,然後將link_content的html更改爲div內容,其id等於散列。爲什麼.on()不適用於未預加載在頁面上的鏈接?

它適用於所有預加載頁面的鏈接,但link_content div中的當前鏈接不會觸發。爲什麼這不起作用?

$(document).ready(function() {   
    $('a').on("click", function(event){ 
     if (location.pathname.search("boh.html")){ 
      hash=this.hash; 
      if(hash=='#more'){ 
       $('#link_content').html($('#hiddenlist').html()); 
      } 
      else if(hash){ 
       $('#link_content').html($(hash).html()); 
      } 
     } 
    }); 
}); 

回答

4

嘗試:

$(document).on("click", "a", function (event) { 
    // Your function stuff 
}); 

這是on方法的委託功能。它允許你將事件綁定到一個容器元素,但回調函數只會對你在第二個參數中提供的選擇器指定的元素執行。使用document作爲此方案的主要選擇可能不是最好的(儘管它應該正常工作),我認爲你應該使用:

$("#page_container").on("click", "a", function() { 

儘量縮小主要選擇到一個容器元素,你希望這個事件被綁定到其包含<a>元素。我猜即使"body"可以工作,我不確定哪一個是"body"document之間的首選。這就是我的意思是:

<body> 
    <div id="main1"> 
     header stuff, no <a> elements 
    </div> 

    <div id="main2"> 
     main content, definitely contains <a> elements 
    </div> 
</body> 

在這種情況下,我會用$("#main2").on("click", "a", function() {因爲它縮小了其中可能發生事件的區域(希望通過jQuery的減少處理時,點擊事件發生時)。

這裏的on簽名:http://api.jquery.com/on/#on-events-selector-data-handlereventObject

之所以這工作是因爲事件被綁定到容器,這是(不應該)動態的,永遠是可用的(因此,事件將始終受到約束)。當您的案例中的「點擊」特定事件由容器內的元素觸發時,會觸發容器,這是此事件發揮作用的地方。該事件將確定觸發事件的元素是否與第二個參數選擇器(如果提供)相匹配,並在其上下文中執行該事件(如果有的話)。

+0

完美伊恩。謝謝。 – alrightgame 2013-02-15 17:05:21

相關問題