2010-07-12 41 views
6

我有兩個輸入字段。我想在用戶點擊除非它是#INPUT給力的重點#area不管。我試過這樣的東西,但由於輸入是文檔的一部分,所以不起作用。強制關注一個元素,但有一個例外。 (jQuery)

$("#area").focus(); 
$(document).click(function() { $("#area").focus() }; 
$("#input").click(function() { $("#input").focus() }; 

想法?

回答

10

將其更改爲

$("#area").focus(); 
$(document).click(function() { $("#area").focus() }); 
$("#input").click(function(e) { e.stopPropagation(); $("#input").focus() }); 

這將向上冒泡到文檔停止的情況下,只會由#input

+1

$(文件)。點擊(函數(){$( 「#區域」)聚焦()}; 應 $(文件)。點擊(函數(){$( 「#area」)。focus()}); – 2017-06-06 16:49:10

1

對正常的點擊時,您需要取消事件冒泡被抓輸入,或者通過在事件處理程序中返回false,或者致電e.stopPropagation()

我不知道,如果在您指定的事件處理程序事項的順序,但你可以嘗試先放#input事件。

1

stopPropogation的解決辦法是比我要建議簡單,但它可能是值得討論這個其他選項。在你已經得到了第一個功能,你可以嘗試採取的第一個參數的功能,這是一個jQuery規範化事件對象:

$(document).click(function(event) { ... 

並對其進行測試,看看事件的target屬性是你的輸入:

$(document).click(function(event) { 
    if(! (event.target == $("#input").get(0))) 
     $("#area").focus(); 
} 
+1

+1,這樣做的附加好處是你只需要一個函數來處理這兩種情況。增加的缺點是,IE瀏覽器,你需要再次進行測試'event.srcElement'這增加了複雜性.. – 2010-07-12 15:28:28

+1

要注意的是'event'是在IE中保留關鍵字,當你使用它作爲一個變量將給出一個錯誤。 此外,您所提供的支票可以寫簡單(短)爲'如果($(event.target)。是( '#輸入'))' – 2010-07-13 07:09:07

相關問題