[英]Remove /Add class to to body using jquery
我陷入問題,我有一個div,我想在按鈕上顯示並在單擊其他任何地方時隱藏。 但是在div類的正文中單擊也被隱藏了,這是我不想要的。
<body>
<ul>
<li> test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li> <button>click</button>
<div id="test" class="hidden">
<ul>
<li> test</li>
<li>test</li>
<li>test</li>
<li>test</li>
</ul>
</div>
</li>
</ul>
</body>
<script>
$('botton').click(function(){
$('#test').removeClass('hidden');
});
$('body').click(function(){
$('#test').addClass('hidden');
});
</script>
如何在div中單擊以禁用添加hidden
類。
使用stopImmediatePropagation:“ 使其余處理程序不被執行,並防止事件使DOM樹冒泡 。” 鏈接
$('button').click(function(e){
$('#test').removeClass('hidden');
e.stopImmediatePropagation();
});
$('body').click(function(e){
$('#test').addClass('hidden');
e.stopImmediatePropagation();
});
第一:您有botton
而不是button
第二:您的問題的解決方案是檢查單擊了哪個元素:
$('button').click(function(){
$('#test').removeClass('hidden');
});
$('body').click(function(event){
if(!$(event.target).is('button')){
$('#test').addClass('hidden');
}
});
為了避免在div中單擊時添加隱藏的類,可以在添加回隱藏類之前檢查click事件是否來自div中的元素。 jQuery.closest()可以用於此目的。
$('body').click(function(event){
if ($(event.target).closest('#test').length == 0)
$('#test').addClass('hidden');
});
正如MysterX指出的那樣,應首先將$('botton')固定為$('button')。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.