私はこれを使っています、
_$("#loginanchor1").click(function (e) {
e.preventDefault();
$("#signin_menu1").slideDown("slow");
});
$(document).mouseup(function (e) {
if ($(e.target).parent("a.loginanchor1").length == 0) {
//$(".signin").removeClass("menu-open");
$("#signin_menu1").slideUp("slow");
}
});
_
すべてが正常に動作しますが、_signin_menu1
_が表示されたブロックで、divスライドdiv内のマウスボタンをクリックすると、_signin_menu1
_が表示されたブロックでmouseup関数が実行されないようにします。なので、状態を変えようと思った
if(($(e.target).parent("a.loginanchor1").length==0) &&( //check the display of the div)
表示を確認するにはどうすればよいですか?
試す
_$(document).mouseup(function (e) {
var $parent = $(e.target).parent("a.loginanchor1");
if ($parent.length == 0 && !$("#signin_menu1").is(':visible')) {
//$(".signin").removeClass("menu-open");
$("#signin_menu1").slideUp("slow");
}
});
_
私は問題で混乱していますが、$("#signin_menu1").is(':visible')
はdivが表示されているかどうかを確認します(display:block)。
追加されたメモ:
$(e.target)
が_signin_menu1
_であるか、または_signin_menu1
_の内部であるかを確認してみてください。このようにします
_$(document).mouseup(function (e) {
if ($(e.target).is('#signin_menu1') || $(e.target).closest('#signin_menu1').length > 0) { return ; } // do nothing on mouseup
var $parent = $(e.target).parent("a.loginanchor1");
if ($parent.length == 0) {
//$(".signin").removeClass("menu-open");
$("#signin_menu1").slideUp("slow");
}
});
_
これにはjqueryの :visible を使用できます。