假设您有一个动态的个人资料页面。当用户单击编辑按钮时,页面中的某些 divs 将变为可用。例如。当用户点击 div 时,会发生一些事情 所以我在那些 divs 上使用 JQuery Click()事件。但我只想在页面处于 编辑模式 时注册。目前我有这样的事情:
$(".someClass").click(function() {
if(editMode) {
//do stuff
}
});
但这不是一种低效的吗?因为即使它不在editMode中,它也会注册click事件。我想要实现的是:
if(editMode) {
$(".someClass").click(function() {
//do stuff
});
}
显然这不起作用。有没有更好的方法来实现这一目标?
答案 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)
我的建议是:
.on()
方法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