当 focusin 在同一元素上触发时如何防止 focusout?
How to prevent focusout when focusin fires on the same element?
我正在将一个 .active class 附加到 div,它环绕着一个输入和标签。
我的问题是,当在包裹 DIV 内单击元素时,将触发 focusout,这会导致样式出现轻微闪烁。
$('body')
.on('focusin', '.formlabel', function() {
$(this).addClass('active');
})
.on('focusout', '.formlabel', function() {
$('.formlabel').removeClass('active');
});
示例如下:http://jsbin.com/mamacogimo/1/edit?html,js,output - 单击标签和下拉列表中的项目。您会注意到蓝色背景闪烁。
有没有办法防止闪烁?
您可以像这样使用超时:
var timeout;
$('body').on('focusin', '.formlabel', function() {
$(this).addClass('active');
clearTimeout(timeout);
}).on('focusout', '.formlabel', function(e) {
timeout = setTimeout(function() {
$('.formlabel').removeClass('active');
}, 250);
});
我正在将一个 .active class 附加到 div,它环绕着一个输入和标签。
我的问题是,当在包裹 DIV 内单击元素时,将触发 focusout,这会导致样式出现轻微闪烁。
$('body')
.on('focusin', '.formlabel', function() {
$(this).addClass('active');
})
.on('focusout', '.formlabel', function() {
$('.formlabel').removeClass('active');
});
示例如下:http://jsbin.com/mamacogimo/1/edit?html,js,output - 单击标签和下拉列表中的项目。您会注意到蓝色背景闪烁。
有没有办法防止闪烁?
您可以像这样使用超时:
var timeout;
$('body').on('focusin', '.formlabel', function() {
$(this).addClass('active');
clearTimeout(timeout);
}).on('focusout', '.formlabel', function(e) {
timeout = setTimeout(function() {
$('.formlabel').removeClass('active');
}, 250);
});