jQuery事件绑定效率问题

时间:2012-11-22 17:51:39

标签: jquery

我在我的项目中有这个[以及更多]非常低效的点击事件绑定代码,并希望找到一种方法来加快速度,因为我认为这是导致我的前端大幅减速的原因。 非常感谢有关如何使这个更流畅的提示,以便在页面上有更多可点击事件时进行缩放。

这些事件中的每一个都在加载时绑定到单个项目,我知道必须有更好的方法将点击事件绑定到每个项目中的每个元素。

感谢您的帮助。

$(self.colBodySelection + " #post_dm_" + sItemId).unbind();
    $(self.colBodySelection + " #post_dm_" + sItemId).click(function(){ 
        var sResponseType = $(this).attr("response_type");
        self.fnRespond(sItemId, sResponseType);
    }); 

    $(self.colBodySelection + " #post_body_" + sItemId).unbind();
    $(self.colBodySelection + " #post_body_" + sItemId).click(function(){   
        //self.fnPostSelect();
    });

    $(self.colBodySelection + " #select_" + sItemId).unbind();
    $(self.colBodySelection + " #select_" + sItemId).click(function(){
        self.fnPostSelect(1, sItemId);  
    });

    $(self.colBodySelection + " #poster_" + sItemId).unbind();
    $(self.colBodySelection + " #poster_" + sItemId).click(function(){
        self.fnLoadUserColumn();    
        $(self.colBodySelection + " #settings_box_" + sItemId).slideUp("fast");
        $(self.colBodySelection + " #history_" + sItemId).slideUp("fast");
        $(self.colBodySelection + " #respond_"+sItemId).slideUp("fast");
        $(self.colBodySelection + " #assign_box_" + sItemId).slideUp("fast");
    });

2 个答案:

答案 0 :(得分:2)

如何尝试在父容器上使用.on()而不是将事件附加到单个DOM元素。.on还负责将事件附加到稍后加载的新子元素。

以简化示例

<div id="parent">
    <div id="child-01">Child 01</div>
    <div id="child-02">Child 01</div>
    <div id="child-03">Child 01</div>
    <div id="child-04">Child 01</div>
</div>

此处不是关联像

这样的事件
$('#child-01').click
$('#child-02').click
$('#child-03').click
$('#child-04').click

我会为孩子们添加一个课程

<div id="parent">
    <div id="child-01" class="child">Child 01</div>
    <div id="child-02" class="child">Child 01</div>
    <div id="child-03" class="child">Child 01</div>
    <div id="child-04" class="child">Child 01</div>
</div>

并在父级上附加.on

$('#parent').on('click','.child', function(){
     //do whatever!!

})

结帐this

答案 1 :(得分:1)

作为第一个非常快速的建议,您可以链接.unbind()和.bind()事件,以便只需要找到一次选择器。 e.g。

$(self.colBodySelection + " #post_body_" + sItemId).unbind().click(function(){   
    //self.fnPostSelect();
});