[英]jquery hide div when click outside
我正在嘗試將div和ul的樣式設置為。 但是,我有一個問題:1)我只想切換單擊的ul,並隱藏另一個ul。 所以我想知道jquery是否支持某些功能,例如“ not click”? 2)我想在鼠標單擊外部時隱藏所有ul。 我做了一些研究,發現其他人使用mouseup或單擊身體。 但是我不能確定它是如何工作的。
$(document).ready(function() { $('.hide').each(function() { $(this).hide(); }); $('.select').click(function() { var id = '#' + $(this).attr('id'); var sub = id + '_sub'; $(sub).slideToggle(); }); $('body').mouseup(function() { if($(this).length == 0) { $(this).hide(); } }); });
div.select { display: inline-block; margin: 10px; padding: 20px; background: red; cursor: pointer; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <div id="1" class="select"> <div class="main"> <span>1</span> </div> <div> <ul id="1_sub" class="hide"> <li>1</li> <li>2</li> </ul> </div> </div> <div id="2" class="select"> <div class="main"> <span>1</span> </div> <div> <ul id="2_sub" class="hide"> <li>1</li> <li>2</li> </ul> </div> </div> <div id="3" class="select"> <div class="main"> <span>1</span> </div> <div> <ul id="3_sub" class="hide"> <li>1</li> <li>2</li> </ul> </div> </div> </body>
每當有人單擊.select div時,您需要隱藏其他ul。 這是一個有效的小提琴: http : //jsfiddle.net/0mgbsa0b/1/
$(document).ready(function() {
$('.hide').each(function() {
$(this).hide();
});
$('.select').click(function() {
$('.hide').each(function() {
$(this).hide();
});
var id = '#' + $(this).attr('id');
var sub = id + '_sub';
$(sub).slideToggle();
});
$('body').mouseup(function() {
if($(this).length == 0) {
$(this).hide();
}
});
});
在這里,你去: 演示
$(document).ready(function() {
$('.hide').hide(); //hide in the beginning
$('.select').click(function() {
$('.hide').slideUp(200); //hide all the divs
$(this).find('.hide').slideDown(200); //show the one that is clicked
});
$(document).click(function(e){
if(!$('.select').is(e.target) || !$('.select').has(e.target)){ // check if the click is inside a div or outside
$('.hide').slideUp(200); // if it is outside then hide all of them
}
});
});
您可以如下定義notClick()
函數:
$.fn.notClicked= function(clickPosition){
if (!$(this).is(clickPosition.target) && $(this).has(clickPosition.target).length === 0){
return true;
}
else{
return false;
}
};
然后將其用作:
$(document).click(function(e){
alert($('.select').notClick(e)); // will return true if it is not clicked, and false if clicked
});
我對您提出的兩個問題很感興趣,因此我將嘗試就這些問題分享一些想法:
1)所以我想知道jquery是否支持某些功能,例如“ not click”?
我個人對quesiton1
PPL經常使用addClass和removeClass來記錄是否單擊了元素,並用class =“ active”標記元素后,使用jQuery選擇器選擇“ .active”或使用jQuery“:not”選擇器來選擇未標記為“”的元素.active”(間接找出未點擊的內容。)
3.您可能還需要考慮點擊傳播問題。 這意味着有時您單擊一個子容器,並向其中的所有父容器觸發click事件。
fiddle link: `http://jsfiddle.net/hahatey/ctp5jngf/2/`
在上述情況下,如果您單擊紅色的子框,則默認情況下將為alert1,alert2(如果您未對click事件應用e.stopPropagation());
2)我想在鼠標單擊外部時隱藏所有ul。 我做了一些研究,發現其他人使用mouseup或單擊身體。 但是我不能確定它是如何工作的。
對於問題2:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.