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

Javascript 是否可以在特定条件下注册单击事件?,javascript,jquery,Javascript,Jquery,假设您有一个动态配置文件页面。当用户单击编辑按钮时,页面中的某些div将起作用。例如,当用户单击div时,它会发生一些事情。 因此,我在这些div上使用了JQuery Click()事件。但我只想在页面处于编辑模式时注册此项。目前我有这样的想法: $(".someClass").click(function() { if(editMode) { //do stuff } }); 但这不是有点低效吗?因为即使不在编辑模式下,它也会注册单击事件。我想要实现的是: i

假设您有一个动态配置文件页面。当用户单击编辑按钮时,页面中的某些div将起作用。例如,当用户单击div时,它会发生一些事情。
因此,我在这些div上使用了JQuery Click()事件。但我只想在页面处于编辑模式时注册此项。目前我有这样的想法:

$(".someClass").click(function() {
    if(editMode) {
        //do stuff
    }
});
但这不是有点低效吗?因为即使不在编辑模式下,它也会注册单击事件。我想要实现的是:

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

显然这行不通。是否有更好的方法来实现此目标?

您可以这样做,但要使用
.on()
事件处理程序附件,如

if(editMode) {
    $(document).on('click', ".someClass", function() {
        //do stuff
    });
}
然后,可以使用
.off()
分离此事件处理程序

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

您可以这样做,但要使用事件处理程序附件,如

if(editMode) {
    $(document).on('click', ".someClass", function() {
        //do stuff
    });
}
然后,可以使用
.off()
分离此事件处理程序

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

您可以这样做,但要使用事件处理程序附件,如

if(editMode) {
    $(document).on('click', ".someClass", function() {
        //do stuff
    });
}
然后,可以使用
.off()
分离此事件处理程序

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

您可以这样做,但要使用事件处理程序附件,如

if(editMode) {
    $(document).on('click', ".someClass", function() {
        //do stuff
    });
}
然后,可以使用
.off()
分离此事件处理程序

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$(document).on('click', ".edit .someClass", function() {
   //do stuff
});
我的建议是:

  • 在您的条件下向目标元素添加一个类
  • 使用
    .on()
    方法为该类名创建一个单击处理程序

  • 注: 您也可以将其更改为
    $(document)
    ,但最好使用距离目标元素最近的静态父元素。

    我的建议是:

  • 在您的条件下向目标元素添加一个类
  • 使用
    .on()
    方法为该类名创建一个单击处理程序

  • 注: 您也可以将其更改为
    $(document)
    ,但最好使用距离目标元素最近的静态父元素。

    我的建议是:

  • 在您的条件下向目标元素添加一个类
  • 使用
    .on()
    方法为该类名创建一个单击处理程序

  • 注: 您也可以将其更改为
    $(document)
    ,但最好使用距离目标元素最近的静态父元素。

    我的建议是:

  • 在您的条件下向目标元素添加一个类
  • 使用
    .on()
    方法为该类名创建一个单击处理程序

  • 注:
    您也可以将其更改为
    $(document)
    ,但最好使用距离目标元素最近的静态父元素。

    您有多个问题

    函数AnimateTile(id,z,w,h,now=true)中出现语法错误{
    ,您可以改为执行以下操作

    function AnimateTile(id, z, w, h, now) {
        now = now == undefined ? true : now;
    
    然后,编辑处理程序必须位于单击处理程序中,因为无论何时
    edit
    的值发生更改,您都需要添加或删除该处理程序

    $(".bigtile").click(function (event) {
        edit = !edit;
        if (edit) $(this).css("background-color", "red");
        else $(this).css("background-color", "green");
        if (edit) {
            $(".tile").on('click.edit', function (event) {
                clicked = !clicked;
                if (clicked) {
                    switch ($(this).attr('id')) {
                        case "tile1":
                            AnimateTile("tile1", 100, 210, 210);
                            break;
                        case "tile2":
                            AnimateTile("tile2", 100, 210, 210);
                            break;
                        case "tile3":
                            AnimateTile("tile3", 100, 210, 210);
                            break;
                        case "tile4":
                            AnimateTile("tile4", 100, 210, 210);
                            break;
                        default:
                            break;
                    }
                } else {
                    switch ($(this).attr('id')) {
                        case "tile1":
                            AnimateTile("tile1", 0, 100, 100, false);
                            break;
                        case "tile2":
                            AnimateTile("tile2", 0, 100, 100, false);
                            break;
                        case "tile3":
                            AnimateTile("tile3", 0, 100, 100, false);
                            break;
                        case "tile4":
                            AnimateTile("tile4", 0, 100, 100, false);
                            break;
                        default:
                            break;
                    }
                }
            });
        } else {
            $(".tile").off('click.edit');
        }
    
    });
    
    演示:


    同时阅读,并且

    您有多个问题

    函数AnimateTile(id,z,w,h,now=true)中出现语法错误{
    ,您可以改为执行以下操作

    function AnimateTile(id, z, w, h, now) {
        now = now == undefined ? true : now;
    
    然后,编辑处理程序必须位于单击处理程序中,因为无论何时
    edit
    的值发生更改,您都需要添加或删除该处理程序

    $(".bigtile").click(function (event) {
        edit = !edit;
        if (edit) $(this).css("background-color", "red");
        else $(this).css("background-color", "green");
        if (edit) {
            $(".tile").on('click.edit', function (event) {
                clicked = !clicked;
                if (clicked) {
                    switch ($(this).attr('id')) {
                        case "tile1":
                            AnimateTile("tile1", 100, 210, 210);
                            break;
                        case "tile2":
                            AnimateTile("tile2", 100, 210, 210);
                            break;
                        case "tile3":
                            AnimateTile("tile3", 100, 210, 210);
                            break;
                        case "tile4":
                            AnimateTile("tile4", 100, 210, 210);
                            break;
                        default:
                            break;
                    }
                } else {
                    switch ($(this).attr('id')) {
                        case "tile1":
                            AnimateTile("tile1", 0, 100, 100, false);
                            break;
                        case "tile2":
                            AnimateTile("tile2", 0, 100, 100, false);
                            break;
                        case "tile3":
                            AnimateTile("tile3", 0, 100, 100, false);
                            break;
                        case "tile4":
                            AnimateTile("tile4", 0, 100, 100, false);
                            break;
                        default:
                            break;
                    }
                }
            });
        } else {
            $(".tile").off('click.edit');
        }
    
    });
    
    演示:


    同时阅读,并且

    您有多个问题

    函数AnimateTile(id,z,w,h,now=true)中出现语法错误{
    ,您可以改为执行以下操作

    function AnimateTile(id, z, w, h, now) {
        now = now == undefined ? true : now;
    
    然后,编辑处理程序必须位于单击处理程序中,因为无论何时
    edit
    的值发生更改,您都需要添加或删除该处理程序

    $(".bigtile").click(function (event) {
        edit = !edit;
        if (edit) $(this).css("background-color", "red");
        else $(this).css("background-color", "green");
        if (edit) {
            $(".tile").on('click.edit', function (event) {
                clicked = !clicked;
                if (clicked) {
                    switch ($(this).attr('id')) {
                        case "tile1":
                            AnimateTile("tile1", 100, 210, 210);
                            break;
                        case "tile2":
                            AnimateTile("tile2", 100, 210, 210);
                            break;
                        case "tile3":
                            AnimateTile("tile3", 100, 210, 210);
                            break;
                        case "tile4":
                            AnimateTile("tile4", 100, 210, 210);
                            break;
                        default:
                            break;
                    }
                } else {
                    switch ($(this).attr('id')) {
                        case "tile1":
                            AnimateTile("tile1", 0, 100, 100, false);
                            break;
                        case "tile2":
                            AnimateTile("tile2", 0, 100, 100, false);
                            break;
                        case "tile3":
                            AnimateTile("tile3", 0, 100, 100, false);
                            break;
                        case "tile4":
                            AnimateTile("tile4", 0, 100, 100, false);
                            break;
                        default:
                            break;
                    }
                }
            });
        } else {
            $(".tile").off('click.edit');
        }
    
    });
    
    演示:


    同时阅读,并且

    您有多个问题

    函数AnimateTile(id,z,w,h,now=true)中出现语法错误{
    ,您可以改为执行以下操作

    function AnimateTile(id, z, w, h, now) {
        now = now == undefined ? true : now;
    
    然后,编辑处理程序必须位于单击处理程序中,因为无论何时
    edit
    的值发生更改,您都需要添加或删除该处理程序

    $(".bigtile").click(function (event) {
        edit = !edit;
        if (edit) $(this).css("background-color", "red");
        else $(this).css("background-color", "green");
        if (edit) {
            $(".tile").on('click.edit', function (event) {
                clicked = !clicked;
                if (clicked) {
                    switch ($(this).attr('id')) {
                        case "tile1":
                            AnimateTile("tile1", 100, 210, 210);
                            break;
                        case "tile2":
                            AnimateTile("tile2", 100, 210, 210);
                            break;
                        case "tile3":
                            AnimateTile("tile3", 100, 210, 210);
                            break;
                        case "tile4":
                            AnimateTile("tile4", 100, 210, 210);
                            break;
                        default:
                            break;
                    }
                } else {
                    switch ($(this).attr('id')) {
                        case "tile1":
                            AnimateTile("tile1", 0, 100, 100, false);
                            break;
                        case "tile2":
                            AnimateTile("tile2", 0, 100, 100, false);
                            break;
                        case "tile3":
                            AnimateTile("tile3", 0, 100, 100, false);
                            break;
                        case "tile4":
                            AnimateTile("tile4", 0, 100, 100, false);
                            break;
                        default:
                            break;
                    }
                }
            });
        } else {
            $(".tile").off('click.edit');
        }
    
    });
    
    演示:



    另请阅读,并且

    为什么您说第二个版本不起作用,除非您必须在条件不满足时删除处理程序-如果已经添加了处理程序(查看
    .off()
    和事件名称空间)因为这根本不起作用:看看为什么你说第二个版本不起作用,除非你必须删除处理程序,如果条件不满足-如果它已经被添加(查看
    .off()
    和事件名称空间)因为这根本不起作用:看看为什么你说第二个版本不起作用,除非你必须删除处理程序,如果条件不满足-如果它已经被添加(查看
    .off()
    和事件名称空间)因为这根本不起作用:看看为什么你说第二个版本不起作用,除非你必须删除处理程序,如果条件不满足-如果它已经被添加(查看
    .off()
    和事件名称空间)因为这根本不起作用:请参阅,但这不会在Op离开编辑模式时删除处理程序。@Barmar我以为Op希望根据条件附加一个事件,th