2013-03-17 72 views
2

我正在製作一個登錄表單,當您單擊一個鏈接時出現。然後,當我點擊其他任何內容或登錄鏈接時,我希望登錄表單消失。但是,當我嘗試使用jQuery .not()函數以及:not()選擇器時,它仍將定位所有元素(它不會刪除從選擇中指定的元素)。
如果您想查看代碼,請查看jsFiddle。正如您在小提琴中看到的那樣,當您單擊登錄鏈接時,它會顯示,但隨後會立即消失,因爲.click()聲明,即使我正在使用.not()函數刪除該元素以及登錄中的元素形式,從選擇。點擊登錄表單及其內的項目也會使其消失,即使它們正在被.not()刪除。.not()不起作用

HTML:

<a id="login" href="javascript:void(0);" title="Login">Log in</a> 
<div id="loginform" style="display:none;"> 
    <form action="login.php" method="POST"> 
     <input type="text" name="uname" id="uname" placeholder="Username" /> 
     <input type="password" name="pword" id="pword" placeholder="Password" /> 
     <input type="submit" id="loginbtn" value="Login" /> 
    </form> 
</div> 

的Javascript:

$("#login").click(function() { 
    $("#loginform").fadeToggle("slow"); 
    if ($("#login").text() == "Log in") { 
     $("#login").text("Close"); 
     $("body, body *").not("#login, #loginform, #loginform *").bind("click", closeLoginForm); 
    } 
    else $("#login").text("Log in"); 
}); 
function closeLoginForm() { 
    $("#loginform").fadeOut("slow"); 
    $("#login").text("Log in"); 
    $("*").unbind("click", closeLoginForm); 
} 

回答

4

您的問題是事件冒泡,單擊事件bubles了DOM和打你沒有你不是()調用排除元素。而是使用事件處理程序來查看點擊來源並取消它。

if ($(e.target).is("#login, #loginform, #loginform *")) return; 

http://jsfiddle.net/ZgYcV/2/

+0

謝謝!我認爲這可能與事件冒泡有關...... – cpdt 2013-03-17 07:02:24