jquery如何通过添加class批量阻止事件?

网站想对全局需要登录的DOM的事件,如“赞”、“踩”、“收藏此问题”、"邀请大大回复"的DOM,这些DOM绑定的Ajax事件都需要用户登录才能操作,那么问题来了,我希望在这些DOM节点前通过统一添加一个class来阻止后续的Ajax事件发生,如下:

用户已登录的情况下:

HTML:
<span class="collect_this_question">收藏此问题</span>
<span class="invite_user_answer">邀请大大回答</span>
javascript:
$('.collect_this_question').click(function(){
    //trigger events
});
$('.invite_user_answer').click(function(){
    //trigger events
});

用户未登录时:

HTML:
<span class="open_login_panel collect_this_question">收藏此问题</span>
<span class="open_login_panel invite_user_answer">邀请大大回答</span>
javascript:
$('.open_login_panel').click(function(){
    open_login_panel();
    return false;
})
$('.collect_this_question').click(function(){
    //trigger events
});
$('.invite_user_answer').click(function(){
    //trigger events
});

代码献丑了,但是这么做始终不能阻止后续事件的发生,该触发的后续class绑定的事件,如class为“.collect_this_question”或者“.invite_user_answer”的事件都触发了,前者的class为“.open_login_panel”绑定的事件都不能阻止,请问有没有好的解决办法?

阅读 6.6k
2 个回答

首先我感觉你的逻辑有点问题,如果进入页面的时候已经知道用户有没有登陆,为什么要绑定后面的事件?如果进入页面的时候不知道登陆的状态那么也不应该这么去执行这个逻辑, 应该有一个checkLoginStatus 之类的方法用于检测是否已经登陆,那么代码逻辑就可以变成:

$('.collect_this_question').click(function(){
    if(checkLoginStatus()){
        //triggerevents
    }else{
         open_login_panel();
    }
});
$('.invite_user_answer').click(function(){
     if(checkLoginStatus()){
        //triggerevents
    }else{
         open_login_panel();
    }
});

而如果你进入页面的时候已经知道登陆状态(按道理应该知道的),那么未登录状态直接绑定弹出登陆框的事件就行了,登陆之后刷新页面后检测到已经登陆再绑定其他状态就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题