jquery:将click事件绑定到ajax-loaded elmente? live()不起作用?

时间:2011-02-22 12:39:43

标签: ajax load live jquery

嘿伙计们, 我有一个输入字段,用于在页面上查找匹配的字符。此页面仅列出锚链接。因此,在键入时我不断加载()(使用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()!

1 个答案:

答案 0 :(得分:0)

当你说“它不起作用”时你的意思是你的功能没有被调用或者你无法取消该功能吗?据我所知,你无法取消直播活动。使用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
        }
    });
});