2013-05-13 82 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

相关问题