函数内的Jquery bind()/ live()

时间:2011-08-23 09:35:54

标签: javascript jquery

我写了一个删除和重写内容的小分页器。我有一个在加载页面后调用的函数,它也应该在更改页面后执行。因为我不打算两次实现该功能(在初始化和更改页面后),我尝试了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()函数,因为它似乎更合适,因为我一直在重写内容。但它有同样的效果:没有......

4 个答案:

答案 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,并且(稍微)更快。