我有jQuery在单击其父级时删除菜单,并在它们从菜单中移开时将其解除。我想改变行为,只有当他们点击页面上的其他地方或不同的菜单时它才会被解雇。这可能吗?
jQuery.fn.dropdown = function () {
return this.each(function () {
$('.ui-dropdown-list > li > a').click(function () {
$(this).addClass("ui-dropdown-hover");
});
$("ul.ui-dropdown-list > li > a").click(function () {
$(this).parent().find("ul").show();
$(this).parent().hover(function () {
}, function () {
$(this).parent().find("ul").hide();
$(this).find('> a').removeClass("ui-dropdown-hover");
});
});
});
};
答案 0 :(得分:4)
尝试在您的身体上放置一个点击处理程序,它会关闭菜单。除非在其他地方被解雇,否则该事件应该传播到身体。
这样的事情:
$("body").click(function() {
$(".ui-dropdown-hover").removeClass(".ui-dropdown-hover");
});
答案 1 :(得分:0)
添加@BradBrening的答案:您可能希望在添加处理程序之前等待一段时间,并且还要取消绑定您已注册执行相同操作的任何早期点击处理程序。否则,如果用户再次点击该项目,它将立即消失!
我做了类似下面的事情,其中'click.junk'是jquery所谓的事件命名空间:
$( 'body' ).unbind( 'click.junk' );
// ...code to add a DIV with ID my_new_item to the DOM...
$( '#my_new_item' ).fadeIn();
window.setTimeout( function() {
$( 'body' ).bind( 'click.junk',
function() { $( '#my_new_item' ).fadeOut() }
);
}, 200 );
这对我有用! (还有参考:209029)