鼠标闪烁,鼠标左键延迟,按钮列表
Flickering mousenter mouseleave with delay, button list
我制作了一个带有按钮的列表(<p>
)。当我将鼠标移到它们上面时,在文本框被标记为黄色以显示我可以写入的位置之前,会有1,2秒的延迟。当我把鼠标移开时,它们变成正常(白色)。
我的问题是,当我快速地将鼠标悬停在按钮上,来回很多文本框得到标记。我曾希望那1.2秒的延迟会起作用,但它没有。但是如果我把鼠标慢慢地移进移出按钮,它就会工作。
这里是一个小提琴:http://jsfiddle.net/Pota/Fj6E6/
这是我的JavaScript代码
$(function () {
$("p.pRespRoleId").mouseenter(function () {
var timeOut = 1200;
$this = $(this);
$this.data("delay", setTimeout(function () {
mouseInRespRoleId();
}, timeOut)
);
})
.mouseleave(function () {
$this = $(this);
if ($this.next(mouseOutRespRoleId()).is(":visible")) {
clearTimeout($this.data("delay"));
mouseOutRespRoleId();
}
else {
$this.next("p.pRespRoleId").show();
}
});
});
和
function mouseInRespRole()
{
var txtInRespRole = document.getElementById("<%=txtRespRoleName.ClientID %>");
txtInRespRole.style.background = "#FFFF00";
if (document.getElementById('txtRespRoleName').value == '')
{
document.getElementById('txtRespRoleName').innerHTML = txtInRespRole;
return false;
}
}
function mouseOutRespRole()
{
var txtOutRespRole = document.getElementById("<%=txtRespRoleName.ClientID %>");
txtOutRespRole.style.background = "white";
if (document.getElementById('txtRespRoleName').value == '')
{
document.getElementById('txtRespRoleName').innerHTML = txtOutRespRole;
return true;
}
}
你的jsFiddle肯定让我感到困惑(我不确定你想要实现什么-有一个切实的可能性,你是过于复杂的事情)。我希望我没有弄错你的要求……
无论如何,我相信你的逻辑是对的,但是在执行中有一些缺陷。因此,这里是jsFiddle的修改(和部分更正)版本,它完成了(我相信)您试图实现的目标。您使用'$this.next(mouseOutRespRoleId()).is(":visible")'肯定是最令人困惑的,所以我完全删除了它。(如果它是为了满足其他一些不明显的目的,你必须提供更详细的描述。)
主要的问题是$this.next(mouseOutRespRoleId()).is(":visible")
永远不会求值为真,因此永远不会清除调用mouseInRespRoleId()
的定时器。
编辑:
我更新了我的jsFiddle插图,以便它照顾IE9的奇怪行为(又名bug(?))。现在应该可以正常工作了。
问题的简短解释:
显然,在IE9中,鼠标事件的生成有一些"时间问题",所以当多次快速进入(mouseOver)和离开(mouseOut)组件时,有时鼠标事件的顺序会变得混乱。例如:
以下事件顺序(即实际事件):
mouseOver -> mouseOut -> mouseOver
可能产生以下(明显错误的)javascript-事件序列(即IE9中JS-engine触发的事件):
mouseOver -> mouseOver(!) -> mouseOut(!)
因此,我在"mouseentered"处理程序函数中添加了一个额外的clearTimeout($this.data("delay"))
,以便清除任何未决的"mouseInRespRoleId"的计划执行。它在IE9上并不完美地工作(可能还有以前版本的IE -未测试),但它是尽可能好的(afaik)。
(注意:在其他(无bug的)浏览器上仍然可以正常工作)
- 如何知道鼠标按钮的当前状态(mouseup状态或mousedown状态)
- 如何使用Javascript检查当前鼠标按钮状态
- 如何在按住鼠标按钮且光标在视口外时检测鼠标离开
- jQuery UI可排序,释放鼠标按钮事件
- 有可能得到鼠标按钮4、5等吗
- 当鼠标按钮的指针尝试关闭弹出窗口时,阴影弹出框消失
- 织物.js - 在不按住鼠标按钮的情况下移动对象
- HTML5画布:如果在画布上移动鼠标时按下了鼠标按钮,则进行检测
- 检查按下了哪个鼠标按钮,如果是双击
- CSS选择器:悬停加上未按下鼠标按钮
- 按下鼠标按钮时监视鼠标坐标
- 无法检测在移动鼠标时按下的鼠标按钮
- 是鼠标按钮的单击通用
- Dart HTML-在不释放鼠标按钮的情况下更改输入范围
- 当我按住鼠标按钮移动鼠标时,Fabric.js–元素是未定义的
- 布尔函数来知道鼠标按钮的位置
- 如何在按下鼠标按钮时触发' onMouseEnter '
- 鼠标事件"mousemove"在按下和释放鼠标按钮时触发
- KineticJS:获取鼠标按钮,x和y从'点击'圆圈上的事件
- 鼠标移动回调事件没有显示哪个鼠标按钮被按下