要解决滚动条单击导致onBlur-Event的问题,我使用“mousedown”将点击标记为“我的div”内部,并在mouseup上重置标记。
我不确定从什么时候开始(更新?)这种行为不再起作用了。我创造了一个小提琴来证明这一点:
http://jsfiddle.net/30x1jr6v/1/
$(document).mousedown(function (documentEventObject) {
console.log('mousedown');
});
$(document).mouseup(function (documentEventObject) {
console.log('mouseup');
});
如果使用chrome,则当您在滚动条上释放鼠标按钮时会触发mouseup事件。在IE 11中,mouseup事件与mousedown事件一起发生......有没有人遇到同样的问题?
版本:
有趣的是,我还安装了一台安装了IE 11.0.9600.18059的Windows 7笔记本电脑。在那里我只在控制台中获取mousedown消息(即使我释放按钮也没有鼠标)!
答案 0 :(得分:0)
在此处回答您的评论,以便进行格式化。
我在工作,无法测试你的小提琴,所以请用它来代替。每个版本的JQuery都有相同的行为...
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js" type="text/javascript"></script>
<script>
$(document).mousedown(function (documentEventObject) {
console.log('mousedown');
});
$(document).mouseup(function (documentEventObject) {
console.log('mouseup');
});
</script>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
答案 1 :(得分:0)
我用定时器而不是鼠标来解决了我的问题(在点击滚动条时没有失去我输入的焦点):
var mouseDownWasInMyDiv = false;
$(myDiv).mousedown(function () {
mouseDownWasInMyDiv = true;
setTimeout(function() {
mouseDownWasInMyDiv = false;
}, 0);
});
$(myInput).blur(function () {
if (mouseDownWasInMyDiv) {
mouseDownWasInMyDiv = false; // should be set in Timeout but can also happen without click (e.g. TAB)
refocus();
}
});