Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查两个元素是否为';对焦_Javascript_Jquery - Fatal编程技术网

Javascript 检查两个元素是否为';对焦

Javascript 检查两个元素是否为';对焦,javascript,jquery,Javascript,Jquery,我必须输入不能共享父元素的元素#Core和#Price。我需要测试它们是否都没有焦点,以及它们何时没有运行函数 我想我可以做一个检查,以确保当一个模糊时,另一个没有像这样聚焦: $('#Core').blur(function() { if(!$("#Price").is(":focus")) { getSellingPrice() } });$('#Price').blur(function() { if(!$("#Core").is(":focus")

我必须输入不能共享父元素的元素#Core和#Price。我需要测试它们是否都没有焦点,以及它们何时没有运行函数

我想我可以做一个检查,以确保当一个模糊时,另一个没有像这样聚焦:

$('#Core').blur(function() {
    if(!$("#Price").is(":focus")) {
        getSellingPrice()
    }
});$('#Price').blur(function() {
    if(!$("#Core").is(":focus")) {
        getSellingPrice()
    }
});
但是,即使我将焦点交给另一个输入节点,这似乎也会触发。我的猜测是,当模糊发生时,它会在选择模糊之前检查秒的焦距。但我不确定如何更改代码以获得所需的行为,即在触发函数调用之前确保两个元素都不在焦点中


对于我如何实现这一点或深入了解当前代码不起作用的原因的任何想法,我们都非常感激。

您可以检查活动元素是否不起作用

var elems = $('#Core, #Price').blur(function() {
    setTimeout(function() {
        if ( elems.toArray().indexOf(document.activeElement) === -1 ) {
            getSellingPrice();
        }
    });
});

但您需要一个超时来确保设置了焦点等。

模糊元素会将焦点传递给主体元素,然后再将其传递给单击的子元素。虽然可能很可怕,但可以使用一次性计时器将模糊与检查单击的元素解耦。由模糊事件触发的概念代码(根据需要转换为您的编码标准、jQuery和应用程序):

HTML

a:
b:
两个元素如何同时聚焦?我在你的问题中遗漏了什么关键吗?不可能。想法是一个元素处于焦点,当它失去焦点时,我想检查另一个元素在执行getSellingPrice()之前是否没有拾取焦点。遗憾的是,您无法一致地检查跨浏览器移动到哪个元素。如果您在一个动作中完成所有操作,不仅在一致地获取事件信息方面存在问题,在切换时也存在问题。有一个属性可以做到这一点:explicitOriginalTarget,但它只在Firefox中可用,我相信现在IE也可以。因此,根据@adeneo的解决方案,超时是必要的。我建议你接受他的答案,这是目前实现这一目标最可靠的方法。这是一个可靠的答案,我相信目前唯一可靠实现这一目标的方法,+1。
function blurred(el)
{
    setTimeout(checkFocus, 4); // ( 4 == Firefox default minimum)
}
function checkFocus()
{  var a = document.getElementById("a");
   var b = document.getElementById("b");
   var infocus = document.activeElement === a || document.activeElement === b;

   if(infocus)
      console.log( "One of them is in focus");
   else
      console.log(" Neither is in focus");
}
a: <input id="a" type="text" onblur="blurred(this)"><br>
b: <input id="b" type="text" onblur="blurred(this)">