e.preventDefault()仅在第二次工作

时间:2012-06-27 16:36:46

标签: jquery events preventdefault

所以,我有这样的问题:第一次,<a>点击e.preventDefault()无效,我跳到页面顶部,但第二次它工作。有什么问题?

$('#more a').live('click', function(e) {
    var last = $('p.post').last().data('id');
    console.log('start');
    if (last != '1') {
        $.ajax({
            type: "POST",
            url: "http://live.iappleworld.ru/ajax_more_mobile.php",
            data: "last=" + last,
            beforeSend: function() {
                $('#more a').text('').prepend('<img src="http://live.iappleworld.ru/ajax-loader.gif" alt="loading"/> Loading...');
            },
            success: function(html) {
                $("#more").remove();
                $(html).hide().appendTo('ul.pageitem').slideDown(600);
            }
        });
    }
    e.preventDefault();
});

我有另一个剧本之前和之后。

3 个答案:

答案 0 :(得分:4)

$('#more').on('click','a', function(e) {
  e.preventDefault(); // at the beginning stop page reload

  // your code

});

关于.on()

委托事件处理的.on()语法:

$(container).on(eventName, target, handlerFunction)

其中containerStatic element元素所属的任何target,当然容器应该在页面加载时属于DOM,但它不应该是动态的。

阅读更多内容 .on()


注意

如果您可以选择使用.live()并将委托事件与jQuery >= 1.7绑定,请尽量避免.on()


根据评论

你写过

$('#more').live('click','a',function(e) {...});

但它应该是

$('#more').on('click','a',function(e) {...});

另一个选项是将a标记href更改为

<a href="javascript:void(0)"></a>

并删除e.preventDefault()

答案 1 :(得分:0)

使用delegate而不是使用.live方法。我不确定你的html结构,但我认为这可行。

$('#more').delegate('a','click', function(e) {
  var last = $('p.post').last().data('id');
  console.log('start');
  if (last != '1') {
    $.ajax({
        type: "POST",
        url: "http://live.iappleworld.ru/ajax_more_mobile.php",
        data: "last=" + last,
        beforeSend: function() {
            $('#more a').text('').prepend('<img src="http://live.iappleworld.ru/ajax-loader.gif" alt="loading"/> Loading...');
        },
        success: function(html) {
            $("#more").remove();
            $(html).hide().appendTo('ul.pageitem').slideDown(600);
        }
    });
  }
  e.preventDefault();
});

答案 2 :(得分:0)

听起来第一次访问页面时没有加载任何javascript文件。然后单击该链接并按“正常”进行操作,这将刷新页面并加载您的javascript,然后按照您的预期拦截您之后的点击事件。

带有(未)受影响链接的区域是否通过ajax加载?