jquery重新加载后,单击';行不通

jquery重新加载后,单击';行不通,jquery,load,bind,Jquery,Load,Bind,链接打开下拉列表以选择排序操作。排序后,页面通过jquery加载加载到自身中,下拉菜单关闭。我们可以再做一次。之后,打开下拉列表的链接不再工作,下拉列表保持关闭状态 如何解决这个问题?主要目标是提供一个工作(打开和关闭)下拉菜单,用于对动态表进行排序。(下拉列表也是动态的,因此需要加载ajax请求) 函数doLoad(排序){ var selector=“div#wrapper”; $(选择器).load('indexsort.php?act='+sort+'+selector,funct

链接打开下拉列表以选择排序操作。排序后,页面通过jquery加载加载到自身中,下拉菜单关闭。我们可以再做一次。之后,打开下拉列表的链接不再工作,下拉列表保持关闭状态

如何解决这个问题?主要目标是提供一个工作(打开和关闭)下拉菜单,用于对动态表进行排序。(下拉列表也是动态的,因此需要加载ajax请求)



函数doLoad(排序){ var selector=“div#wrapper”; $(选择器).load('indexsort.php?act='+sort+'+selector,function(){ $('div#sortdropdown').hide(); doBindings(); }); } 函数doBindings(){ //单击时对表排序-按名称排序 $('a#sortn')。单击(函数(事件){ event.preventDefault(); 多洛德(“sn”); }); //单击时对表格排序-按日期排序 $('a#sortd')。单击(函数(事件){ event.preventDefault(); 多洛德(“sd”); }); //打开/关闭“按排序”下拉菜单 $('a#排序按钮')。单击(函数(事件){ event.preventDefault(); $('div#sortdropdown').toggle(); }); } $(文档).ready(函数(){ //绑定单击,使其在加载方法后处于活动状态 doBindings(); //着陆后隐藏下拉列表 $('div#sortdropdown').hide(); });
将绑定移出doBindings()函数,并使用jQuery函数:

$('a#sortbutton').live("click",function(event) {
    event.preventDefault();
    $('div#sortdropdown').toggle();
});
另外,更改选择器

a#sortbutton
的效率低于简单的
#sortbutton
,如下所述:

对于id选择器,jQuery使用 JavaScript函数 document.getElementById(),它是 效率极高。当另一个 选择器已附加到id 选择器,如h2#pageTitle、jQuery 在开始之前执行附加检查 将元素标识为匹配项


将绑定移出doBindings()函数,并使用jQuery函数:

$('a#sortbutton').live("click",function(event) {
    event.preventDefault();
    $('div#sortdropdown').toggle();
});
另外,更改选择器

a#sortbutton
的效率低于简单的
#sortbutton
,如下所述:

对于id选择器,jQuery使用 JavaScript函数 document.getElementById(),它是 效率极高。当另一个 选择器已附加到id 选择器,如h2#pageTitle、jQuery 在开始之前执行附加检查 将元素标识为匹配项

我认为在调用indexsort.php文件之前,需要在doLoad函数中单击事件

我不推荐live,因为它的方法非常昂贵。

我认为在调用indexsort.php文件之前,需要在doLoad函数中单击事件


我不推荐live,因为它的方法非常昂贵。

更重要的是,如果我使用$('a#sortbutton').live('click',function(event)…那么链接在第一次加载后就不起作用了如果你使用
live()
,你不需要每次都重新运行
doBindings()
live()
'Attach[es]现在和将来,所有与当前选择器匹配的元素的事件处理程序。因此,您应该能够将该代码放在全局级别。是的!它可以工作!我将所有内容都放在live()和doBindings()函数之外。谢谢!@Marko:Cool:)我已经更新了我的答案,为下一个出现的人提供了更多描述,我还添加了一个性能改进,您应该实现它。还有一个解决方案是在下拉链接上解除绑定。哪一个在处理能力和内存方面更容易?更重要的是,如果我使用$('a#sortbutton').live('click',function(event)…那么链接在第一次加载后甚至不起作用如果你使用
live()
,你不需要每次都重新运行
doBindings()
live()
“Attach[es]现在和将来,所有与当前选择器匹配的元素的事件处理程序。因此,您应该能够将该代码放在全局级别。是的!它可以工作!我将所有内容都放在live()和doBindings()函数之外。谢谢!@Marko:Cool:)我已经更新了我的答案,为下一个出现的人提供了更多描述,我还添加了一个性能改进,您应该实现它。还有一个解决方案是在下拉链接上解除绑定。哪一个在处理能力和内存方面更容易?你有证据证明它非常昂贵吗?我们说的是以微秒计的昂贵吗?这也行!我在doLoad函数中添加了一个#sortbutton:$('a#sortbutton').unbind();如果这是更好的生活,那么这就是solution@Marko和@Town:Check。转到“注意事项”标题。我看不到有任何东西表明在这种情况下使用
live()
会显著降低性能@马克:我想你喜欢用哪一种都行。当然要改变你的选择器-
a#sortbutton
不必要的沉重。你有证据证明它非常昂贵吗?我们说的是以微秒计的昂贵吗?这也行!我在doLoad函数中添加了一个#sortbutton:$('a#sortbutton').unbind();如果这是更好的生活,那么这就是solution@Marko和@Town:Check。转到“注意事项”标题。我看不到有任何东西表明在这种情况下使用
live()
会显著降低性能@马克:我想你喜欢用哪一种都行。不过,一定要更换选择器-
sortbutton
不必要地沉重。