问题描述
|
我试图将\'click \'事件附加到特定类的所有元素。问题是绑定事件时,某些元素位于选项卡上处于隐藏状态(显示:无)。 (.bind())。似乎当显示这些元素时,事件不再受约束。
$(\'a.someClass\').bind(\'click\',function(){
alert(\"test\");
});
隐藏的元素似乎没有绑定单击事件。如果我选择隐藏元素:
$(\'a.someClass:hidden\').bind(\'click\',function(){
alert(\"test\");
});
当这些元素不再隐藏时,单击事件似乎没有绑定。有人经历过吗?无论元素的显示属性如何,都有没有办法绑定和事件到元素?
谢谢
解决方法
两年后编辑:正如某些人指出的那样,现在不赞成使用
Live
函数(您也可以在链接的文档页面的顶部看到)。当前版本的正确事件处理程序名称为On
。请参见Maxim的答案以获取一个很好的例子。
原始答案:
您是否尝试过使用Live()?
.live(\'click\',function(){/* code */});
?
版本说明:live
已在jQuery 1.7中弃用,并已在jQuery 1.9中删除。此答案仅对早于jQuery 1.7的jQuery版本正确
,从jQuery 1.7开始,不推荐使用.live()
方法。
您现在可以使用.on()
方法。通过将委托事件附加到在运行jQuery时在HTML中可见的元素。
因此,如果在运行jQuery时ѭ8处于隐藏状态,则应将委托事件附加到主体上,以便将来在有可见的view8ѭ元素时它将运行,例如:
$(\'body\').on(\'click\',\'input.a.someClass\',function(){
alert(\"test\");
});
,使用委托(请注意,这是在取消隐藏它们之后):
$(\'body\').delegate(\'.someClass\',\'click\',function (evt) {
// do something here
});
,采用
$(\'parentelement\').on(\'click\',\'taget element\',function(){
})
load13ѭ应该在页面加载时可见
,根据http://api.jquery.com/live/上的jquery文档
现在和将来为与当前选择器匹配的所有元素的事件添加处理程序
这是一个如何使用它的示例:
<!DOCTYPE html>
<html>
<head>
<style>
p { background:yellow; font-weight:bold; cursor:pointer;
padding:5px; }
p.over { background: #ccc; }
span { color:red; }
</style>
<script src=\"http://code.jquery.com/jquery-1.5.js\"></script>
</head>
<body>
<p>Click me!</p>
<span></span>
<script>
$(\"p\").live(\"click\",function(){
$(this).after(\"<p>Another paragraph!</p>\");
});
</script>
</body>
</html>
,时间已经改变,现在可以使用\“。on \”来完成
.on(\'click\',function(){/* code */});