Javascript $(';html';)。单击()。。。除了一个元素以外的任何地方
我有一个动态附加的菜单,如果你点击页面上的任何地方,包括菜单链接本身,我会删除它。我试图实现的是防止删除,如果你点击一个特定的链接,这根本不适合我。不幸的是,我不能使用委托方法,如果这有帮助的话,因为客户端使用的jquery上的旧版本没有更新它的选项 所以,也许你可以建议是否有任何方法可以做到这一点。这是我的一个简单例子Javascript $(';html';)。单击()。。。除了一个元素以外的任何地方,javascript,jquery,html,click,Javascript,Jquery,Html,Click,我有一个动态附加的菜单,如果你点击页面上的任何地方,包括菜单链接本身,我会删除它。我试图实现的是防止删除,如果你点击一个特定的链接,这根本不适合我。不幸的是,我不能使用委托方法,如果这有帮助的话,因为客户端使用的jquery上的旧版本没有更新它的选项 所以,也许你可以建议是否有任何方法可以做到这一点。这是我的一个简单例子 <script> $(function() { $('.menu').append('<a href
<script>
$(function() {
$('.menu').append('<a href="" class="solid">Option</a> <a href="">Option</a> <a href="">Option</a>');
$('.menu a').live('click',function(){
return false;
});
$('a.solid').live('click',function(){
return false;
});
$('html').click(function() {
$('.menu').remove();
});
});
</script>
$(函数(){
$('.menu')。追加('');
$('.menu a').live('单击',函数()){
返回false;
});
$('a.solid').live('click',function()){
返回false;
});
$('html')。单击(函数(){
$('.menu').remove();
});
});
集装箱呢
<div class="menu"></div>
您是否尝试过以下方法:
$('.menu a').click(function(event){
event.stopPropagation();
});
也许它会像这样工作
$('html').click(function(e) {
if(!$(e.target).hasClass('solid') )
{
$('.menu').remove();
}
});
请参阅:您还可以检测对整个文档的单击,并检查单击的当前元素是否是您的菜单元素
$(document).click(function(event){
if(event.target !== $('.menu')[0]) {
// hide the menu...
}
});
还要添加event.preventDefault()以完全停止操作。我在这里进行了测试,它可以正常工作,您可能正在使用一个奇怪的jQuery版本。如果您在“.menu a”的单击处理程序中执行了
alert(event)
,它会告诉您什么?@woutherh ok它可以工作,但没有LIVE方法。在我的情况下,它必须是…live('click',函数(事件){….因为我以后会用ajax调用菜单。而使用LIVE方法则不起作用。你说的“以后用ajax调用菜单”是什么意思?当新的菜单数据出现时,你可以重新应用事件处理程序。这太完美了!!!!很有魅力,很直接,包括.LIVE('click',function…stoppropagation是一个更好的方法,但是如果在某种程度上不可行,那么这个方法会起作用。我可以问这样一个问题:如果我的容器中有子容器,我想如何做同样的行为?我不想给容器中的所有子容器添加一个类。有人知道解决方案吗?
$('html').click(function(e) {
/* exept elements with class someClass */
if($(e.target).hasClass('someClass')){
e.preventDefault();
return;
}
/* but be carefull the contained links! to be clickable */
if($(e.target).is('a')){
return;
}
/* here you can code what to do when click on html */
});