jQuery:检查滑块切换可见性是否不工作?

jQuery:检查滑块切换可见性是否不工作?,jquery,Jquery,我试图使用幻灯片切换来显示登录表单,如果他们在框外单击,我希望该表单向上滑动 我一切正常,但是我的可见性检查不起作用,因此在表单容器外单击不起作用。你能找出原因吗 var loginForm = jQuery("#login .login-form"); jQuery("#login a").click(function(e) { e.preventDefault(); loginForm.slideToggle(); }); // below check isn't wor

我试图使用幻灯片切换来显示登录表单,如果他们在框外单击,我希望该表单向上滑动

我一切正常,但是我的可见性检查不起作用,因此在表单容器外单击不起作用。你能找出原因吗

var loginForm = jQuery("#login .login-form");
jQuery("#login a").click(function(e) {
    e.preventDefault();
    loginForm.slideToggle();

});

// below check isn't working why?
if (jQuery(loginForm).is(":visible")) {
    jQuery("body").click(function() {
        jQuery(loginForm).slideUp();
    });
}

这段代码是从哪里执行的?绑定单击处理程序时,是否确定文档已准备就绪

此外,loginForm变量已包装在jQuery中,无需再次包装:

// Make sure the document is ready for manipulating the DOM:
jQuery( function ( $ ) {
    var loginForm = $( '#login .login-form' );

    $( '#login a' ).click( function ( e ) {
        e.preventDefault();
        loginForm.slideToggle();    
    });

    if ( loginForm.is( ':visible' ) ) {
        $( document ).click( function () {
            loginForm.slideUp();
        });
    }
});

您需要在单击处理程序中进行检查:

jQuery("body").click(function() {
    if (loginForm.is(":visible")) {
        loginForm.slideUp();
    }
});
另外,您不需要对已经是jQuery对象的对象调用jQuery。无需重新包装您的loginForm


您还需要在登录时单击处理程序中的event.stopPropagation,否则单击该处理程序将冒泡到正文并触发该处理程序。

为什么今天没有人使用$today?人们开始喜欢写东西了?你能解释一下为什么if loginForm.is:visible{alert'yes';}不起作用吗?你的if在点击处理程序之外。代码的作用是加载页面,检查表单是否可见,如果可见,则附加处理程序。如果您的表单在初始加载时不可见,则处理程序根本不会附加。好的,如果我使表单初始可见:隐藏而不是显示:无,那么我的代码将正常工作。你的解决方案是唯一的出路吗?我问这个问题的原因是,似乎每次点击页面都会测试表单是否可见,即使表单不可见,而不是首先检查表单是否可见,然后应用函数。thx.如果你让表单可见,你的代码会在每次点击主体时滑动。如果愿意,可以将body.click放置在其他单击处理程序中,然后取消绑定body.click。