我写了一个删除和重写内容的小分页器。我有一个在加载页面后调用的函数,它也应该在更改页面后执行。因为我不打算两次实现该功能(在初始化和更改页面后),我尝试了bind()/ live()和一个简单的函数。
该功能如下所示:
jQuery('.blogentry').each(function (){
jQuery(this).click(function(){
//Clicking on the element opens a layer, definitely works - I tested it
});
});
它在初始化后执行,在页面更改后执行它,我尝试了以下内容:
jQuery('.nextPage, .prevPage').click(function changePage(){
// Changing page and rewriting content
showEntry();
});
//...
showEntry();
//...
function showEntry(){
jQuery('.blogentry').each(function (){
jQuery(this).click(function(){
//Clicking on the element opens a layer, definitely works - I tested it
});
});
}
但如果放入函数( lol )并通过showEntry()调用函数,则不会执行该函数;
之后我尝试绑定函数...
jQuery('.nextPage, .prevPage').click(function changePage(){
// Changing page and rewriting content
jQuery('.blogentry').bind("click", showEntry);
});
//...
jQuery(this).click(function showEntry(){
//Clicking on the element opens a layer, definitely works - I tested it
});
也没用。 bind()之后的代码也不会执行。 我想也许绑定到事件函数是个问题,如果已经通过参数给出了一个事件,那么我也试过了:
jQuery('.nextPage, .prevPage').click(function changePage(){
// Changing page and rewriting content
jQuery('.blogentry').bind("click", showEntry);
});
//...
function showEntry(){
//Clicking on the element opens a layer, definitely works - I tested it
});
}
根本没有成功。也许我不能从关于bind()的函数内部调用函数?也许我只是不理解bind() - 函数?我也尝试了live()函数,因为它似乎更合适,因为我一直在重写内容。但它有同样的效果:没有......
答案 0 :(得分:1)
实现这一目标的最简单方法应该是
jQuery('.blogentry').live('click', function() { /* onclick handler */ });
这应该将函数绑定到调用时页面上的每个blogentry以及稍后添加到页面的所有blogentry。
附加说明:
在$(foo).each(function() { $(this).click(fun); });
中,每个都是不必要的 - $(foo).click(fun);
就足够了。
$(foo).bind('click', fun);
在功能上等同于$(foo).click(fun)
- 您使用哪一个并不重要。
答案 1 :(得分:1)
您可以使用委托或绑定。不要像这样调用函数,只需使用.blogentry创建一个委托,即使通过ajax加载新页面,它也应该更新。它会自动执行此操作。
$("#blogcontainer").delegate(".blogentry", "click", function(){ //open layer });
答案 2 :(得分:1)
这应该对你有用
$(body).delegate(".blogentry", "click", function(){
showEntry();
});
答案 3 :(得分:1)
alternaltivly你可以使用事件委托
$(document).ready(function () {
$('#blogcontainer').click( function(e) {
if ( $(e.target).is('.blogentry') ) {
// do your stuff
}
});
});
因此,无需在创建或重新加载时绑定每个blogentry,并且(稍微)更快。