我们有一个input
和一个active
,它已添加到mousedown
并在mouseup
上删除。
将鼠标光标放在输入上时效果很好。
问题是,mouseup
在您点击input
后,保留并从中移除光标后无法正常工作 - 系统active
未被删除。
可以修复吗?
答案 0 :(得分:4)
那是因为mouseup
没有在输入上触发,而是在它之外。您可以在document
对象上使用通用事件处理程序:
$(document).mouseup(function() {
$('input.active').removeClass('active');
});
答案 1 :(得分:2)
我将提出一个CSS解决方案。您可以使用此规则实现相同的效果:
input:active{
outline: 10px solid #000;
}
(IE8 +)
答案 2 :(得分:1)
我建议倾听焦点和焦点的事件。如果您使用键盘选择输入或将其留在键盘上,则不会触发mouseevents。
你可以这样做:
$('input').on('focusin focusout', function(event) {
$(this).toggleClass('active', event.type==='focusin');
});
你所描述的问题仍然会出现,因为如果你在里面徘徊并将鼠标拖到外面,该元素仍将具有焦点,但我想这是可以的,因为输入仍然会有焦点。
如果你想用鼠标事件完全处理它,并且想要解决将鼠标拖到外面的问题,那么你必须在dom对象上使用鼠标事件来实现它,然后检查内部的正确元素。处理程序。
答案 3 :(得分:0)
对我来说工作正常,请检查以下代码:
$('input')。bind('click mouseup mousedown',function(event){ //一些点击事件的代码
if (event.type == 'mousedown'){
console.log('mousedown');
$(this).addClass('active');
}
if (event.type == 'mouseup'){
console.log('mouseup');
$(this).removeClass('active');
}
//console.log(event.type);
}); http://jsfiddle.net/rpfHw/3/
最佳
答案 4 :(得分:0)
好吧,我尝试了很多方法来解决这个问题。
使用mouseup
替换mouseout
可获得更好的结果。
由于我们正在使用鼠标,因此它只会在不悬停时删除类。
答案 5 :(得分:0)
我最近遇到了同样的问题。我通过向目标元素添加 mouseleave 事件来修复此问题。