我必须输入无法共享父元素的元素#Core和#Price 。我需要测试它们两个都没有聚焦,何时它们没有运行功能。
我以为我可以做一个检查,以确保当一个人模糊另一个没有像这样给予焦点时:
$('#Core').blur(function() {
if(!$("#Price").is(":focus")) {
getSellingPrice()
}
});$('#Price').blur(function() {
if(!$("#Core").is(":focus")) {
getSellingPrice()
}
});
但即使我将焦点放在另一个输入节点上,这似乎也会触发。我的猜测是,当模糊发生时,它会在选择之前检查秒焦点。但我不确定如何更改代码以获得所需的行为,以确保在触发函数调用之前两个元素都不在焦点。
有关如何实现此目标或了解当前代码无效的原因的任何想法都非常感谢。
答案 0 :(得分:2)
您只需检查活动元素是否
即可var elems = $('#Core, #Price').blur(function() {
setTimeout(function() {
if ( elems.toArray().indexOf(document.activeElement) === -1 ) {
getSellingPrice();
}
});
});
但是你需要超时才能确保设置焦点等。
答案 1 :(得分:0)
模糊元素会将焦点传递给body元素,然后再将其传递给单击的子元素。可怕的单击计时器可以用来解决模糊与检查单击的元素。由模糊事件触发的概念代码(根据需要转换为您的编码标准,jQuery和应用程序):
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");
}
HTML
a: <input id="a" type="text" onblur="blurred(this)"><br>
b: <input id="b" type="text" onblur="blurred(this)">