是否可以在特定条件下注册点击事件?

时间:2014-01-06 08:30:15

标签: javascript jquery

假设您有一个动态的个人资料页面。当用户单击编辑按钮时,页面中的某些 divs 将变为可用。例如。当用户点击 div 时,会发生一些事情 所以我在那些 divs 上使用 JQuery Click()事件。但我只想在页面处于 编辑模式 时注册。目前我有这样的事情:

$(".someClass").click(function() {
    if(editMode) {
        //do stuff
    }
});

但这不是一种低效的吗?因为即使它不在editMode中,它也会注册click事件。我想要实现的是:

if(editMode) {
    $(".someClass").click(function() {
        //do stuff
    });
}

显然这不起作用。有没有更好的方法来实现这一目标?

5 个答案:

答案 0 :(得分:3)

当您进入编辑模式时,您可以绑定所有处理程序。然后,当用户离开编辑模式时,您可以使用以下命令解除绑定:

$(".someClass").off("click");

答案 1 :(得分:0)

您可以使用.on()事件处理程序附件(如

)执行此操作
if(editMode) {
    $(document).on('click', ".someClass", function() {
        //do stuff
    });
}

然后您可以使用 .off()

分离此事件处理程序
$(".someClass").off("click");

答案 2 :(得分:0)

在处于编辑模式时,在容器上添加一个类,例如:'edit',否则将其删除。

$(document).on('click', ".edit .someClass", function() {
   //do stuff
});

答案 3 :(得分:0)

我的建议是:

  1. 将条件中的类添加到目标元素
  2. 使用.on()方法
  3. 为该类名创建一个点击处理程序
    if(editMode) {
       $(".someClass").addClass('editable');
    }
    
    $(".someClass closest static parent elem").on('click', '.editable', function() {
        //do stuff
    });
    

    注意:

    $(".someClass closest static parent elem")
    

    您也可以将其更改为$(document),但最好将最近的静态父元素用于该目标元素。

答案 4 :(得分:0)

您有多个问题

<{1}}中的

语法错误,你可以这样做,而不是像

那样
function AnimateTile(id, z, w, h, now = true) {

然后编辑处理程序必须在单击处理程序中,因为每当function AnimateTile(id, z, w, h, now) { now = now == undefined ? true : now; 的值发生更改时,您需要添加处理程序或将其删除。

edit

演示:Fiddle

另请阅读event namespace.off()