2013-01-17 54 views
1

我正在使用jquery .mouseup()當用戶在其外部點擊時關閉popop。我的問題是這隻有在它第一次使用時纔有效。我試過了.on()版本,但這並沒有幫助。.mouseup()只發射一次

$(document).ready(function() { 
    $(document).mouseup(function(e) { 
     var container = $("#mpop-loop"); 
     if (container.has(e.target).length === 0) { 
     container.fadeOut("fast").remove(); 
     } 
    }); 
}); 

$(document).ready(function() { 
    $(document).on("mouseup", function(e) { 
     var container = $("#mpop-loop"); 
     if (container.has(e.target).length === 0) { 
     container.fadeOut("fast").remove(); 
     } 
    }); 
}); 

我怎樣才能使這項工作每次它觸發?

+1

如果你想讓它觸發點擊爲什麼不直接結合的Click事件? –

+0

容器一旦淡出,你如何淡化它? – Blazemonger

+0

@JamesAllardice這不會導致他們只能識別彈出窗口內部的點擊**,併爲他們提供與他們想要的功能相反的功能嗎? –

回答

0

.has只適用於後代,忽略元素本身。試試這個(你不需要$(document).ready因爲你的事件反正結合到文檔):

$(document).on("mouseup", function(e) { 
     var container = $("#mpop-loop"); 
     if (!container.has(e.target).length && !container.is(e.target)) { 
     container.fadeOut("fast"); 
     } 
    }); 

http://jsfiddle.net/mblase75/bWDXH/

0
$('body').click(function(){ 

    $("#mpop-loop").fadeOut("fast"); 

}); 

如果您刪除「#mpop-loop」,那麼當您再次打開容器時可能不得不再次添加事件。

+1

事件綁定到''標籤,所以你不需要重新綁定任何事件處理程序(除非你刪除/替換整個'')。但是,這並沒有提供他們描述的功能。 –

0

你可以嘗試使用「on」函數的委託並使用「:not(.popup-class)」過濾器將click事件委託給除彈出窗口以外的頁面上的所有元素嗎?只是一個想法,讓被點擊的彈出窗口也不會觸發關閉。

+0

是否這樣? ''(document).on(「click」,':not(#mpop-loop)',function(){' –

+0

是的,雖然你需要''*:not(#mpop-loop)''通配符選擇器匹配所有 –