【问题标题】:jquery: bind click event to ajax-loaded elmente? live() won't work?jquery:将单击事件绑定到 ajax 加载的 elmente?活()不会工作?
【发布时间】:2011-02-22 23:16:06
【问题描述】:

大家好, 我有一个在页面上查找匹配字符的输入字段。此页面仅列出锚链接。因此,在键入时,我不断地 load()(使用 jquery load() 方法)此页面以及所有链接,并检查匹配的字符集。如果找到匹配的链接,它将显示给用户。但是,所有这些链接都应该有 e.preventDefault() 。

它根本行不通。 #found 是显示匹配元素的容器。所有被点击的链接都应该有 preventDefault() 。

编辑:

/*Animated scroll for anchorlinks*/
var anchor = '',
    pageOffset = '',
    viewOffset = 30,
    scrollPos = '';
$(function() {
    $("a[href*='#']").each(function() {
        $(this).addClass('anchorLink');
        $(this).bind('click', function(e) {
            e.preventDefault();
            //console.log('test');
            anchor = $(this).attr('href').split('#')[1];

            pageOffset = $("#"+anchor).offset();

            scrollPos = pageOffset.top - viewOffset;
            $('html, body').animate({scrollTop:scrollPos}, '500');
        })      
    });
});

好吧,我正在寻找所有包含# 的href。所以我知道这些元素是跳转到其他元素的锚。我不希望我的页面跳转,而是使用这个特定的#id 平滑滚动到这个元素。

当我将bind('click', ... 用于打开页面时已加载的普通页面元素时,这可以正常工作。它不适用于通过 ajax 加载的锚点!如果我将 bind 更改为 live ajax 加载的元素没有任何变化 - 它们仍然不起作用。然而,一直在页面上的普通锚也不会触发该功能。所以 live() 没有任何作用!

【问题讨论】:

  • 你能在某个地方(用你的 ajax 位)进行测试吗?它在所有浏览器中都失败了吗?

标签: ajax load live jquery


【解决方案1】:

当您说“它不起作用”时,您的意思是您的函数没有被调用或者您不能取消该函数?据我所知,您无法取消现场活动。使用 jQuery 1.4,您可以使用 return false 取消实时事件传播。调用 e.preventDefault() 将不起作用。

编辑:正确,所以这段代码应该主要工作。它仍然不会做的是,它不会将“anchorLink”类添加到您的新锚点。但是,如果点击有效,请告诉我,我也会为您提供正确的代码来添加类!

var anchor = '',
    pageOffset = '',
    viewOffset = 30,
    scrollPos = '';
$(function() {
    $("a[href*='#']").each(function() {
        $(this).addClass('anchorLink');
    });


    $("a").live('click', function(e) {
        if ($(this).attr("href").indexOf("#") > -1) {
            e.preventDefault();
            //console.log('test');
            anchor = $(this).attr('href').split('#')[1];

            pageOffset = $("#" + anchor).offset();

            scrollPos = pageOffset.top - viewOffset;
            $('html, body').animate({ scrollTop: scrollPos }, '500');
            //nikhil: e.preventDefault() might not work, try return false here
        }
    });
});

【讨论】:

  • 我使用的是 jquery 1.5,看来这个现场活动根本不起作用!它不仅会为 ajax 加载的元素触发,而且根本不会触发。如果我在所有锚链接上测试我的函数,它不会触发该函数。如果我使用 bind() 就可以了。我只需要能够在某些特定链接上调用一个函数 - 加载页面时它们是否在 dom 中或者是否使用 ajax 加载都无关紧要。
  • 老实说,选择器对我来说看起来很奇怪。您可以复制您尝试绑定的 UI 元素之一的过去标记吗?
  • 当然不行 :) 你的代码有几处有点问题。我现在正在修改我的原始答案,给你一个我认为应该可以工作的示例代码。试试看。
  • 嗨,不确定我的代码是否有帮助,但如果有帮助,请检查复选框以表明您接受了我的回答?谢谢!
猜你喜欢
  • 2012-10-21
  • 2011-09-28
  • 2023-03-07
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
相关资源
最近更新 更多