所以,我有这样的问题:第一次,<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();
});
我有另一个剧本之前和之后。
答案 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)
其中container
是Static 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加载?