在编写茉莉花测试时,似乎jQuery无法识别输入具有焦点。在两个输入元素之间切换时,不显示警报,当单击输出而不聚焦另一个输入时,将显示警报。但是,通过在我的测试代码中使用.focus
和.blur
,我无法获得所需的行为。它总是认为它们都不是专注的。此外,如果不调用.triggerHandler
,则根本不会调用模糊处理程序。
输入可见并附加到DOM。
var $inputs = $("input");
function blurTimeout() {
if (!$inputs.is(":focus")) {
alert("Nothing's focused");
}
}
function blur() {
setTimeout(blurTimeout, 0);
}
function main() {
$inputs.on("blur", blur);
}
$(main);
修改
看来,调用$inputs.first().focus()
来关注其中一个输入,然后alert($inputs.first().is(":focus"))
提醒false
。
var $input = $inputs.first();
$input.focus();
alert(!!$input.is("focus")); // -> false
答案 0 :(得分:1)
事件和处理程序似乎很好。问题在于逻辑。当任何输入具有焦点!$inputs.is(':focus')
时,始终返回false
。您可以通过替换:
!$inputs.is(':focus')
使用:
$inputs.filter(':focus').length
答案 1 :(得分:0)
以下是更改后的代码。测试现在按预期工作,并保持原始行为。
var $inputs = $("input");
function blurTimeout() {
var index = $inputs.length;
while(index--){
if($inputs[index] === document.activeElement){
return;
}
}
alert("Nothing's focused");
}
function blur() {
setTimeout(blurTimeout, 0);
}
function main() {
$inputs.on("blur", blur);
}
$(main);