まず、フォーカス/ぼかしは通常、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