Javascript 函数中的Jquery bind()/live()

Javascript 函数中的Jquery bind()/live(),javascript,jquery,Javascript,Jquery,我写了一个小寻呼机,可以删除和重写内容。我有一个函数在加载页面后调用,它也将在更改页面后执行。因为我不想两次实现这个函数(初始化时和更改页面后),所以我尝试了bind()/live()和一个简单的函数 函数如下所示: jQuery('.blogentry').each(function (){ jQuery(this).click(function(){ //Clicking on the element opens a layer, definitely works -

我写了一个小寻呼机,可以删除和重写内容。我有一个函数在加载页面后调用,它也将在更改页面后执行。因为我不想两次实现这个函数(初始化时和更改页面后),所以我尝试了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()函数,因为它似乎更适合,因为我一直在重写内容。但是它有同样的效果:没有…

实现这一点最简单的方法应该是

jQuery('.blogentry').live('click', function() { /* onclick handler */ }); 
这将在调用时将函数绑定到页面上的每个blogentry,以及以后添加到页面中的所有blogentry

补充说明:

$(foo).each(function(){$(this).click(fun);})中每个都是不必要的-
$(foo)。单击(乐趣)就足够了


$(foo).bind('click',fun)
在功能上等同于
$(foo)。单击(乐趣)
-使用哪一个并不重要

实现这一点的最简单方法应该是

jQuery('.blogentry').live('click', function() { /* onclick handler */ }); 
这将在调用时将函数绑定到页面上的每个blogentry,以及以后添加到页面中的所有blogentry

补充说明:

$(foo).each(function(){$(this).click(fun);})中每个都是不必要的-
$(foo)。单击(乐趣)就足够了


$(foo).bind('click',fun)
在功能上等同于
$(foo)。单击(乐趣)
-使用哪一个并不重要

您可以使用委托或绑定。不要这样调用函数,只需使用.blogentry创建一个委托,即使在通过ajax加载新页面后,它也应该更新。它将自动执行此操作


$(“#blogcontainer”).delegate(“.blogentry”,“click”,function(){//open layer})

您可以使用委托或绑定。不要这样调用函数,只需使用.blogentry创建一个委托,即使在通过ajax加载新页面后,它也应该更新。它将自动执行此操作


$(“#blogcontainer”).delegate(“.blogentry”,“click”,function(){//open layer})

这应该适合您

$(body).delegate(".blogentry", "click", function(){
    showEntry();
});

这应该对你有用

$(body).delegate(".blogentry", "click", function(){
    showEntry();
});

也可以使用事件委派

$(document).ready(function () {
  $('#blogcontainer').click( function(e) {
    if ( $(e.target).is('.blogentry') ) {
      // do your stuff
    }
  });
});

因此,无需在创建或重新加载时绑定每个博客条目,而且速度(稍微)更快。

也可以使用事件委派

$(document).ready(function () {
  $('#blogcontainer').click( function(e) {
    if ( $(e.target).is('.blogentry') ) {
      // do your stuff
    }
  });
});


因此,无需在创建或重新加载时绑定每个博客条目,而且速度(稍微)更快。

不清楚您想要实现什么。您正在尝试将函数绑定到另一个单击事件中的单击事件?代码是如何更改页面的?它正在进行Ajax调用吗?在这种情况下,分页函数中的bind方法可能在页面通过ajax加载之前执行,因此没有任何效果。如果是这种情况,请尝试在成功处理程序中为相关Ajax调用调用bind。是的,但是第一次单击事件会更改并重写内容,因此之后新编写的元素将再次绑定到打开层的函数。该功能也是一个点击事件,并在开始时初始化,但应在内容重写时执行。我想他的意思是在sm控件点击时,页面布局发生变化,之后他需要在页面上的sm新控件上绑定点击事件。。不过,这是现场直播的理想竞争者。。但是我不确定你的问题是什么,你能把你的代码放在jsfiddle上吗?不清楚你想实现什么。您正在尝试将函数绑定到另一个单击事件中的单击事件?代码是如何更改页面的?它正在进行Ajax调用吗?在这种情况下,分页函数中的bind方法可能在页面通过ajax加载之前执行,因此没有任何效果。如果是这种情况,请尝试在成功处理程序中为相关Ajax调用调用bind。是的,但是第一次单击事件会更改并重写内容,因此之后新编写的元素将再次绑定到打开层的函数。该功能也是一个点击事件,并在开始时初始化,但应在内容重写时执行。我想他的意思是在sm控件点击时,页面布局发生变化,之后他需要在页面上的sm新控件上绑定点击事件。。不过,这是现场直播的理想竞争者。。但是我不确定你的问题是什么。你可以在JSFIDLE上托管你的代码吗?或者其他东西工作得很好,非常感谢。我只是觉得太复杂了!非常好用,非常感谢。我只是觉得太复杂了!非常感谢。live()-解决方案对我来说很有效,但我相信使用delegate它也能很好地工作@samiSalami只是提醒一下,应该在live()上使用委托。演出好多了,谢谢。我会记住这一点,可能会改变这一点,尽管到目前为止我没有任何性能问题(页面上没有那么多内容;-)。@SamiSalami您可能没有性能问题,但其他人可能会。不同的浏览器,较慢的计算机等等。。。这可能没什么不同,但你永远不会知道。即使您使用
$(document.delegate(..)
,它仍然比live快。试试看,这是一个si