为什么不单击使该元素成为活动元素?

时间:2013-05-13 22:15:55

标签: jquery

我在这个jsfiddle中有一些盒子 - http://jsfiddle.net/SzDZn/1/ - 我想知道为什么点击它们仍然会将身体显示为活动元素:

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

这里的目标是当咔嗒声在它之外时,实际上让一个盒子消失,即它的模糊事件,但是我甚至无法让盒子成为焦点,更不用说失去焦点。 / p>

由于

1 个答案:

答案 0 :(得分:2)

对于要获得焦点的元素,它必须能够接收输入。没有任何“盒子”可以使它们在被点击时不被认为具有焦点。有一些方法可以通过在元素上设置tabindex来绕过焦点要求,但这仍然被认为是非标准的。

“如果没有选择,则有效元素是网页的<body>。” - Mozilla - activeElement


jsFiddle Demo

答案取决于您的标题,但并未完全解决您的本地化示例。在您的示例中,如果您希望单击时元素变为“活动”,则只需给它一个类。例如,让我们给每个元素点击类“activeElement”。现在,当注册任何click事件时,我们知道如果我们删除带有“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");
});