2013-02-15 34 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

相关问题