2013-05-13 70 views
0

我在這的jsfiddle一些箱子 - http://jsfiddle.net/SzDZn/1/ - 我不知道爲什麼點擊其中任何一個仍顯示身體作爲有源元件:爲什麼不單擊使該元素成爲活動元素?

$('#blue_box').click(function() { 
    alert ("active box is " + document.activeElement); 
}); 

這裏的目標是要真正發揮箱消失當點擊在它外面時,也就是模糊事件,但是我甚至無法讓這些框着重於焦點,不必介意失去焦點。

由於

+2

因爲輸入元素獲得焦點嗎? https://developer.mozilla.org/en-US/docs/Web/API/document.activeElement?redirectlocale=zh-CN&redirectslug=DOM%2Fdocument.activeElement – j08691 2013-05-13 22:19:31

回答

2

對於一個元件到接收焦點,它必須能夠接收輸入。沒有一個「盒子」可以讓他們在點擊時不被視爲有焦點。有一些方法可以通過在元素上設置tabindex來繞過焦點要求,但這仍然被認爲是不標準的。

「如果沒有選擇,有源元件是一個網頁的<body>。」 - Mozilla - activeElement


jsFiddle Demo

這個答案是你的標題,但不能完全解決您的本地化示例。在你的例子中,如果你希望有一個元素在你點擊時變爲「活動」,那麼就給它一個類。例如,讓每個元素單擊類「activeElement」。現在,當任何點擊事件被註冊時,我們知道如果我們刪除類爲「activeElement」的元素,我們將刪除最後點擊的那個框。讓我們也確保我們不會意外地允許這些點擊事件傳播,否則我們會刪除錯誤的元素。

$('#red_box').click(function(e) { 
e.stopPropagation(); 
$('.activeBox').remove(); 
$(this).addClass("activeBox"); 
alert($(".activeBox")[0].id + " is the active box"); 
}); 

$('#green_box').click(function(e) { 
e.stopPropagation(); 
$('.activeBox').remove(); 
$(this).addClass("activeBox"); 
alert($(".activeBox")[0].id + " is the active box"); 
}); 

$('#beige_box').click(function(e) { 
e.stopPropagation(); 
$('.activeBox').remove(); 
$(this).addClass("activeBox"); 
alert($(".activeBox")[0].id + " is the active box"); 
}); 
+0

感謝Travis提供了豐富而有趣的示例。這裏的人給出的問題他們認爲是愚蠢的負面評價,沒有答案或輕浮的答案無助於論壇。 – Steve 2013-05-14 00:58:41

相關問題