web-dev-qa-db-ja.com

jqueryでdivの表示(なし/ブロック)を確認するにはどうすればよいですか?

私はこれを使っています、

_$("#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)

表示を確認するにはどうすればよいですか?

11
Mubeen

試す

_$(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");
    }
});
_
16
Reigel

これにはjqueryの :visible を使用できます。

3
Tim