Javascript jQuery模糊处理程序不处理div元素?

Javascript jQuery模糊处理程序不处理div元素?,javascript,jquery,onblur,Javascript,Jquery,Onblur,我不明白为什么jQuery模糊处理程序在最简单的情况下不能工作。我正在创建一个div 100px x x 100px,并在其上设置一个模糊事件,但它没有触发(): 我对模糊的理解错了吗?我希望当我点击任何不是div的地方时,模糊事件会触发…对吗 根据jQuery的文档: 在最近的浏览器中,事件的域已扩展到 包括所有元素类型。元素可以通过键盘失去焦点 命令,如Tab键,或通过鼠标单击 第页。 我已经在最新的Chrome和Mac上的Firefox上试用过了。据我所知,模糊发生在有焦点的输入上,不管你

我不明白为什么jQuery模糊处理程序在最简单的情况下不能工作。我正在创建一个div 100px x x 100px,并在其上设置一个模糊事件,但它没有触发():

我对模糊的理解错了吗?我希望当我点击任何不是div的地方时,模糊事件会触发…对吗

根据jQuery的文档:

在最近的浏览器中,事件的域已扩展到 包括所有元素类型。元素可以通过键盘失去焦点 命令,如Tab键,或通过鼠标单击 第页。


我已经在最新的Chrome和Mac上的Firefox上试用过了。

据我所知,模糊发生在有焦点的输入上,不管你怎么说

我希望当我点击任何不是div的地方时,模糊事件会触发…对吗

不完全是这样,模糊事件只会发生在先有焦点的元素上

因此,为了使模糊事件发生,您必须首先对div进行聚焦,div如何首先获得聚焦

如果您确实想确定div之外是否有单击,则需要将单击处理程序附加到文档,然后检查单击的来源

var div_id = "#my_div";
var outsideDivClick = function (event) {
  var target = event.target || event.srcElement;
  var box = jQuery(div_id);

  do {
    if (box[0] == target) {
      // Click occured inside the box, do nothing.
      return;
    }
    target = target.parentNode;
  } while (target);   
}
jQuery(document).click(outsideDivClick);
请记住,此处理程序将在每次单击页面时运行。(过去,如果我想使用类似的东西,我会在需要时连接处理程序,在不再需要查找时将其移除)

从:

集中 当某个元素通过定点设备或通过 标签导航。此事件对以下元素有效:标签、输入、选择、, 文本区域和按钮

变得模糊不清 当某个元素通过定点设备或通过其他方式失去焦点时,会发生模糊事件 标签导航。此事件对以下元素有效:标签、输入、选择、, 文本区域和按钮

jQueryDocs状态浏览器将事件扩展到其他元素,我猜这意味着模糊和焦点是更通用的别名。默认情况下,非输入元素没有资格接收这些元素,并且元素必须在失去焦点之前以某种方式获得焦点-在div之外的每次单击都不会触发模糊

提到给一个元素一个
tabindex
将允许这样做,并且似乎在Chrome之后对我有用。(尽管轮廓相当难看。)

a不能“模糊”,因为这会让div首先拥有焦点。非输入元素如a和textarea可以有焦点,这就是jQuery文档所指的

您需要的是“mouseout”或“mouseleave”事件(mouseleave不冒泡,mouseout冒泡),当光标离开div时将触发该事件。如果您需要单击,我将在主体以及div上附加一个“click”事件,并仅在div上停止事件传播:

$("div").click(function(e) {
    return false; // stop propagation
});

或者,如果你真的决定了,你可以用a和一些CSS规则来伪装一个div的外观:)

如果你想在鼠标移到框上时发生什么事情,你可以使用这个事件。

好的,所以我更新了JSFIDLE并添加了$(“#test”).focus();。。。但还是没有运气。我想你没有领会我的意思,一开始a
div
就不能有焦点。但我想你可能没有领会我的原意,jQuery的文档似乎暗示了另一个意思(我可能会误解它,但它似乎很简单)。我理解你是如何阅读它的。我只是不认为是这样,或者至少我从未见过事情是这样的。在过去,我总是不得不使用我上面描述的方法来检查特定divRight之外的点击,好吧-是的,这很有趣。我想医生可能是错的。谢谢你提供的信息。是的,我知道W3C规范是这么说的,但正如我在帖子中所说的,根据jQuery的文档,在最近的浏览器中,事件的范围已经扩展到包括所有元素类型……我假设FF6和最新的Chrome符合条件。@jbyrd-不确定为什么jQuery文档会取代W3Cspecs@jbyrd我猜这意味着“模糊”和“焦点”在浏览器中被别名为更通用的DOM焦点输入/输出事件。尽管如此,并不是每个元素都符合默认条件-我会相应地编辑答案。好吧,我想我可以知道你来自哪里-但问题确实是关于通过单击其他地方发生的模糊事件。
var div_id = "#my_div";
var outsideDivClick = function (event) {
  var target = event.target || event.srcElement;
  var box = jQuery(div_id);

  do {
    if (box[0] == target) {
      // Click occured inside the box, do nothing.
      return;
    }
    target = target.parentNode;
  } while (target);   
}
jQuery(document).click(outsideDivClick);
$("div").click(function(e) {
    return false; // stop propagation
});