この質問は何度も尋ねられましたが、答えはどれもうまくいかないようです。
Divのcssは次のとおりです。
#info{
display: none;
position: fixed;
z-index: 500;
height: 50%;
width: 60%;
overflow: auto;
background: rgba(187, 187, 187, .8);
}
私は次のコードを使用しようとしました:
$("#info").click(function(e){
e.stopPropagation();
});
$(document).click(function(){
$("#info").hide();
});
このコードと同様に:
$(document).mouseup(function (e){
var container = $("#info");
if (container.has(e.target).length === 0) {
container.hide();
}
});
しかし、divをクリックすると、それも消えます。理由はわかりませんが、そうなります。
他にうまくいくものはありますか?
ターゲットにはid=info
、あなたが試すことができます:
$(document).click(function(e) {
// check that your clicked
// element has no id=info
if( e.target.id != 'info') {
$("#info").hide();
}
});
また試すことができます:
$(document).click(function() {
if( this.id != 'info') {
$("#info").hide();
}
});
$(document).click(function(e) {
// check that your clicked
// element has no id=info
// and is not child of info
if (e.target.id != 'info' && !$('#info').find(e.target).length) {
$("#info").hide();
}
});
onclick
イベントハンドラーをdocument
オブジェクトに接続します。
$(document).click(function(e) {
if(e.target.id != 'info') {
$("#info").hide();
}
});
デモ: http://jsfiddle.net/aUjRG/
これが何が起こっているのかをよりよく理解するのに役立つ、純粋なJavaScriptのソリューションです。
function hideInfo(){
if(window.event.srcElement.id != 'info'){
document.getElementById('info').style.display = 'none';
}
}
document.onclick = hideInfo;
デモ: http://jsfiddle.net/mmzc8/
どちらのソリューションも、ユーザーがクリックした場所がinfo
のIDを持つ要素上にあるかどうかを確認します。ユーザーがinfo
要素をクリックしなかった場合、info
要素を非表示にします。
このコードを試してください、これは私にとって最適です。
jQuery('.button_show_container').click(function(e) {
jQuery('.container').slideToggle('fast');
e.stopPropagation();
});
jQuery(document).click(function() {
jQuery('.container').slideUp('fast');
});
IPadでも機能するソリューションを使用するには、代わりに次の機能トリガーを使用する必要があります。
$(document).on("mousedown touchstart",function(e){
var $info = $('#info');
if (!$info.is(e.target) && $info.has(e.target).length === 0) {
$info.hide();
}
});
同様に、マウスアップを隠したい場合は、「タッチエンド」を追加します。
$(document).on("mouseup touchend",function(e){
...
});
特定のdivまたはそのdiv要素内のいずれかがクリックされたかどうかのマウスクリックのチェックのみにクラスを追加できます。
$(document).click(function(e){
if ( !$(e.target).hasClass("[class name for check]") &&
$("[element class or id]").css("display")=="block" ) {
//...code if clicked out side div
}
});