div
があり、外側をクリックしたときに非表示にしたい。私のコードは:
<div id="mydiv">The div must be above button</div>
$('#mydiv').click(function(e) {
e.stopPropagation();
});
$(document).click(function() {
$('#mydiv').fadeOut(300);
});
しかし、それは私のために働いていません...
[〜#〜]更新[〜#〜]
完全なコードを以下に示します。ボタンをクリックすると、上にdiv
が表示されるので、外側をクリックすると、このdiv
を非表示にする必要があります。
<div id="but" style="text-align: right;"><button type="button">Show Div!</button></div>
<div id="mydiv" style="display:none;">The div must be above button</div>
$("#but button").click(function(){
var pos = $(this).offset(),
div = $("#mydiv");
// Make it visible off-page so
// we can measure it
div.css({
"display": "block",
"border": "1px solid black",
"position": "absolute",
"left": -10000,
"top": 0
});
// Move it where we want it to be
div.css({
"left": pos.left - 40,
"top": pos.top - div.height() - 10
});
});
$('#myDiv').click(function(e) {
e.stopPropagation();
});
$(document).click(function() {
$('#mydiv').fadeOut(300);
});
JavaScriptclickは バブルイベント であり、divとdocumentまで続きます。 stopPropagation()
関数を使用してイベントの伝達を停止すると、ドキュメントのクリックは処理されません。したがって、問題を解決するには、e.stopPropagation()
を削除するだけです。
最善の方法は次のとおりです。
_$('#mydiv').click(function(e) {
e.stopPropagation();
$(this).fadeOut(300);
});
_
このdivをクリックした場合、外側をクリックしてこのdivを非表示にする方法を教えてください。
では、想像してみましょう。IDが「wrapperId」のコンテナをクリックすると、「myDiv」が非表示になるはずです。
_$("#wrapperId").click(function(e){
$('#mydiv').fadeOut(300);
})
_
コンテナがドキュメントの場合、$(document)
の代わりに$("#wrapperId")
を使用できます。
何が起こっているのか見ていない: jsbin.com/ilowij/7
ボタンをクリックするときは、クリックイベントの伝播を停止する必要があります。次の変更を行います。
_$("#but button").click(function(e){
e.stopPropagation();
...
}
_
イベントターゲットをチェックする以下のコードで試してください
$(document).click(function(e) {
if(e.target.id!="mydiv"){ // if click is not in 'mydiv'
$('#mydiv').hide(3000);
}
});
ドキュメントにクリックイベントをバインドするよりも、次の種類のスニペットを使用できます。
$('#mydiv').click(function(e) {
e.stopPropagation();
})
.css({outline:0})
.focusout(function(){
$(this).fadeOut(300);
}).focus();
簡単で再帰的に動作する以下の解決策を試してください:
$(document).mouseup(function(e)
{
var container = $("YOUR CONTAINER SELECTOR");
// if the target of the click isn't the container nor a descendant of the container
if (!container.is(e.target) && container.has(e.target).length === 0)
{
container.hide();
}
});
Css3ターゲットを使用するすべての理由
<a href='#login'>Login</a>
<div id='login'>
blah blah blah
</div>
css:
#login{width:400px;height:600px;background:#fff;margin:10%
auto;position:absolute;left:0;right:0;
}
now we will hide the login box by putting a class on it
<div class='lightbox' id='login'>
</div>
css:
.lightbox{display:none;}
.lightbox:target{display:block;}
それはすべてのコードがあまりにもJavaScriptを使用する必要はありません
これをチェック
<a href="#" id="link">Click me</a>
(function($) {
$("#link").click(function(e){
e.stopPropagation();
var div = $("#show_hide");
// Make it visible off-page
div.css({
"display": "block"
});
});
$(document).click(function(e){
$('#show_hide').fadeOut(300);
});
})(jQuery);
たとえば、このリンクをチェックアウトできます。
これをチェックしてください http://jsfiddle.net/x5Env/
最も簡単な方法は、ドキュメントのonclickイベントをキャプチャすることです。このクリックイベントは、関心のある要素の外で発生し、その後falseを返します。このトリックを使用して、メニューイベントの外側のクリックが発生したときにポップアップメニューを非表示にしました。
$('html').click(function() {
$("div").css({"display": "none"});
_});
_ $('.option').click(function(event){
event.stopPropagation();
_});
_
$(".search").keyup(function(){
search=$(".search");
if(search.val()!= "" )
_{
_ $("div").css({"display": "block"});
_}
_ else
_{
_ $("div").css({"display": "none"});
_}
_ _});
_
_ <input type="search" class="form-control search" name="search" autocomplete="off" >
<div>
</div>
_
これは隠すのに役立ちます