11

私はこれを使用しています、

$("#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 のスライドサップ内でマウス ボタンをクリックすると、ブロックが表示されたときにマウスアップ機能を防止したいと考えていsignin_menu1ます。だから私は条件を次のように変更することを考えました、

if(($(e.target).parent("a.loginanchor1").length==0) &&( //check the display of the div)

では、表示を確認するにはどうすればよいでしょうか。

4

2 に答える 2

16

試す

$(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");
    }
});
于 2010-09-23T07:18:34.463 に答える
3

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

于 2010-09-23T07:23:45.373 に答える