まず、フォーカス/ぼかしは通常、input
要素のみを対象としています。div
それらは要素に対して発火しません。
div
ドキュメントをクリックしたときに非表示にする必要がありますが、ドキュメント自体またはその中の何かをクリックしたときは非表示にする必要はありません。div
これを行うには、ドキュメントにクリック ハンドラーを追加し、次のdiv
ように DOM ツリーの上方へのクリックの伝播を停止します。
$(document).ready(function() {
$("#my_account_button").click(function() {
$("#c_fancy").css({'display' : 'block'});
$("#my_account").slideDown("Slow");
});
$("#hide_account").click(function() {
$("#c_fancy").css({'display' : 'none'});
$("#my_account").slideUp("Slow");
});
$(document).click(function() {
$("#c_fancy").css({'display' : 'none'});
$("#my_account").slideUp("Slow");
});
$("#c_fancy").click(function(e) {
e.stopPropagation();
});
});
おそらく、統合して非表示コードを共通の関数に入れたいと思うでしょう:
$(document).ready(function() {
$("#my_account_button").click(function() {
$("#c_fancy").css({'display' : 'block'});
$("#my_account").slideDown("Slow");
});
function hideAccount() {
$("#c_fancy").css({'display' : 'none'});
$("#my_account").slideUp("Slow");
}
$("#hide_account").click(hideAccount);
$(document).click(hideAccount);
$("#c_fancy").click(function(e) {
e.stopPropagation();
});
});
div
背後のコンテンツが暗くなっていることに気付きました。この暗くなるオーバーレイが#c_fancy
要素の一部である場合、これは問題を引き起こす可能性があります。その場合は、コードを少し変更する必要があります。基本的に、上記のコードを から に変更し、$(document)
もちろん適切に$('#myOverlay')
置き換える必要があります。#myOverlay