jQuery live()方法只触发一次

时间:2014-09-19 21:44:23

标签: javascript jquery html

我在网站上看到类似的问题,但我找不到适用于我的修复:(

我正在尝试使用jQuery的live()方法在刷新内容后,在单击分区内的链接时,在页面的分区中多次触发事件。

点击“divgauche”中的链接后,首先将内容加载到“divdroite”中,然后我想点击“divdroite”中的点击以多次刷新自己的内容。

代码如下:

$j("body").on('click', "#divgauche a", function (event1) {
    $j("#divdroite").load((this.href + " #courscontainer"), function () {
        $j('#divdroite .collapsible').on('click', function (g) {
            $j('>*:has(*)', g.target).slideToggle(300);
            g.preventDefault();
            g.stopPropagation();
        });
    });
    event1.preventDefault();
    event1.stopPropagation();
});

$j("#divdroite a").live('click', function (event2) {
    $j("#divdroite").load((this.href + " #courscontainer"), function () {
        $j('#divdroite .collapsible').on('click', function (h) {
            $j('>*:has(*)', h.target).slideToggle(300);
            h.preventDefault();
            h.stopPropagation();
        });
    });
    event2.preventDefault();
    event2.stopPropagation();
});

任何帮助都会受到高度赞赏。

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试在.load事件上添加.complete回调,以将click事件应用于刚刚加载的元素。

$j("#divdroite").load((this.href + " #courscontainer"), function ()
    {
       $j('#divdroite .collapsible').on('click',function(h)
       {
       $j('>*:has(*)',h.target).slideToggle(300);
         h.preventDefault();
         h.stopPropagation(); 
       });
    }); 
event2.preventDefault(); 
event2.stopPropagation(); 
})
.complete(function(){
 // add code your click event code here that will apply to the loaded div
$("#coursecontainer").on('click',someFunction);

});

答案 1 :(得分:0)

很难确切地知道发生了什么,但是......

与您委派a元素的点击次数相同,您还应该能够委派对.collapsible元素的点击次数。

使用.on(eventType, selector, fn)语法(两次),代码应该是这样的:

$j("#divdroite").on('click', "a", function (e) {
    e.preventDefault();
    e.stopPropagation();
    $j("#divdroite").load((this.href + " #courscontainer"));
}).on('click', '.collapsible', function (e) {
    e.preventDefault();
    e.stopPropagation();
    $j('>*:has(*)', e.target).slideToggle(300);
});

唯一的假设是#divdroite是一个静态元素,不会被删除/替换(通过其他一些javascript)。如果它仍然不起作用,那么我猜测那是怎么回事。