2013-09-25 55 views
1

我试图创建一个通用的'锁'类,这将阻止用户在加载块时与任何元素(锚点,按钮等)交互。没有什么真正的花式或安全,只是简单的加载锁。jQuery检测类已被删除

我试图检测点击class =“locked”的元素,并拒绝点击返回false ;.我的问题是,即使元素完成加载后,我删除了“锁定”类,jQuery仍然检测到该元素具有它。

代码在这里:

HTML

<div id="block"></div> 

CSS

#block { 
background-color:#ccc; 
width:300px; 
height:100px; 
} 

jQuery的

$(document).ready(function() { 

$("#block").addClass("locked"); 
$("#block").html("locked"); 

setTimeout(function() { 
    $("#block").removeClass("locked"); 
    $("#block").html("unlocked !"); 
}, 4000); 


$(".locked").click(function() { 
    alert("locked! denying click event"); 
    return false; 
}); 

}); 

你可以看到什么是的jsfiddle发生:(开放式开发工具看那个4秒钟后类已被删除)

jsFiddle demo here

这是一个错误还是我做错了什么(不推荐)?

编辑:谢谢你的有用答案!

回答

3

使用.on()

当你的内容是loaded dynamically你不能访问他们directly

在加载时间,即DOM ready动态加载的内容不是DOM的一部分。因此你必须使用event Delegation

$(document).on('click','.locked',function() { 
    alert("locked! denying click event"); 
    return false; 
}); 
1

由于 '.locked' 动态添加/删除最接近的静态父元素代表这样

$(document).on('click','.locked',function() { 
    alert("locked! denying click event"); 
    return false; 
}); 

DEMO

1

当你这样做代码:

$(".locked").click(function() { 
    alert("locked! denying click event"); 
    return false; 
}); 

您添加的点击事件,其中将已经锁定在那个代码执行时间类的元素。点击事件然后绑定到元素,并且不在意元素在点击发生时是否仍然具有类锁定。

一个解决办法就是解除绑定,当你删除类锁定的单击事件:

$("#block").removeClass("locked").unbind("click"); 
0

使用event.preventDefault()方法来取消事件。试试:

$(".locked").click(function() { 
event.preventDefault(); 
    alert("locked! denying click event"); 
    });