代码之家  ›  专栏  ›  技术社区  ›  Alex

jquery-ajax加载问题

  •  0
  • Alex  · 技术社区  · 16 年前

    我正在尝试使用jquery.load方法加载我的所有网站页面,所以,我的网站看起来是这样的:

    <script type="text/javascript">  
      $(function() {
        $('.link').bind('click', function(e) {
                var page = $(this).attr('href');
                $('#site').addClass('loading');
                $('#content').load(page, function (){
                $('#site').removeClass('loading');
        });
    
        e.preventDefault();
        return false;
      });
    
    <a href="test.php" class="link">Test</a>
    

    使用此代码,每个获得class=“link”的链接都会将我的页面加载到div内容上。 工作很好!没有问题,但是当我加载test.php时,如果我在任何链接、按钮或其他东西上使用class=“link”,它就不起作用了,新页面加载在我的内容之外。

    已经尝试将其复制到新加载的文件,但该文件不起作用,是否有人收到提示?

    谢谢

    1 回复  |  直到 16 年前
        1
  •  2
  •   Paolo Bergantino    16 年前

    这是因为当您绑定一个事件时,它只将它绑定到当时DOM中的元素。因此,如果您稍后添加新的事件,它们将不会绑定到以前附加的事件。假设您有jquery 1.3,它有一个内置函数来绕过这个调用 live .使用它,可以将事件绑定到所有当前和将来的元素。它不支持所有事件,但是 click 它确实支持。

    因此,记住这一点,您只需替换:

    $('.link').bind('click', function(e) {
    

    用这个:

    $('a.link').live('click', function(e) {
    

    (我将a.添加到选择器中,因为如果可能的话,指定标签更有效)

    如果没有jquery 1.3,应该尽快升级。如果不能,请查看 livequery 插件,实现了同样的事情,但在一个更不优雅的方式。或者,您可以简单地使用一个函数来绑定操作,并在每次加载新数据时调用它。但是,jquery的 居住 这是最好的方法。

    推荐文章