当前位置:  开发笔记 > 编程语言 > 正文

jQuery .live多次开火!

如何解决《jQuery.live多次开火!》经验,为你挑选了1个好方法。

问候大师,这有点难以解释,但我会试一试.

我有一个关于JQuery中的.live()函数的快速问题.我将在这里简化示例.我有一个页面"index.php",它有一个容器"#display_files_container",其中填充了由不同页面"process.php"动态生成的锚链接.

当根据该链接的属性选择这些链接时,链接将加载到链接中.见例子:

的index.php



index.php







?


".$current_directory_list[$i]['directory_name']. " "; } ?>

PROCESS.PHP

此文件包含用于根据从index.php中的.click()方法发送的post变量"$ _POST ['dirid']"从数据库填充$ current_directory_list []数组的代码.然后它回显结果,我们将它们显示在#display_files_container容器中.当您单击这些链接时,该过程会重复.

这可以.....你可以点击目录树,每次都加载新的链接.但是,它似乎想要多次执行.load()process.php文件.加载process.php的次数似乎越多,单击链接的次数就越多.所以例如你可以点击一个链接和firebug报告process.php加载了23次.....最终我会想象我会记录一个stackoverflow.如果您有任何想法,请告诉我.有什么办法可以保证.live()只加载process.php文件一次吗?

谢谢,-cs



1> jholster..:

会发生什么,每次单击链接时,都会将新的单击事件处理程序绑定到每个链接.这是可能的,因为特定事件可以有多个处理程序.您必须在处理程序中返回false以停止事件冒泡.

更新:我不确定为什么处理程序会多次绑定,但我的猜测是它与"实时事件"实现的特殊性有关.见事件代表团从文档:

传递给.live()的处理程序永远不会绑定到元素; 相反,.live()将特殊处理程序绑定到DOM树的根.

另一种解决方案是使用bind()或click()而不是live(),并在加载ajax后显式调用它:

function bind_link_handler() {
    $('.directory').click(function() {
        $('#display_files_container').load('...', bind_link_handler);
    })
}

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有