【发布时间】:2013-06-26 12:02:54
【问题描述】:
我在 div 上有一个 textarea。在 div 中,我突出显示输入到 textarea 中的文本的某些部分。我试图将鼠标悬停在亮点上的事件上,但显然我不能,因为它们在我的文本区域下。我在想是否可以使用 textarea 上的 mousemove 事件来跟踪鼠标坐标,但后来我认为这对我没有好处,因为如果突出显示跨越,我无法确定确切的边界。
所以问题是,我如何为那些因为在其他元素下而没有收到这些事件的元素模拟 mouseover 和 mouseout 事件?
编辑:
我根据 Marcus 的回答完成了一个解决方法。 mouseover / mouseout 事件的完整代码:
var mouseDown = false;
var mouseIsOver = false;
var lastOverElem = false;
textarea.mousemove(function(e) {
if (!mouseDown) {
textarea.hide();
var elm = $(document.elementFromPoint(e.pageX, e.pageY));
textarea.show();
if (elm.hasClass("highlighted")) {
/* MOUSE MOVE EVENT */
if (!mouseIsOver) {
mouseIsOver = true;
/* MOUSE OVER EVENT */
}
} else {
if (mouseIsOver) {
mouseIsOver = false;
if (lastOverElem) {
/* MOUSE OUT EVENT */
}
}
}
}
});
$('body').mousedown (function () {mouseDown = true;});
$('body').mouseup (function () {mouseDown = false;});
【问题讨论】:
-
stackoverflow.com/questions/1009753/… 有很多想法可以帮到你。
-
非常有趣。但是,我需要另一个元素上方的文本区域,以便用户可以键入文本、选择它、对其进行上下文菜单等。pointer-events:none;禁用所有这些功能。还 +1 向我展示了我从未知道存在的技术
-
该页面上的一个答案建议暂时隐藏文本区域,然后使用 document.elementFromPoint 方法将事件传递给被覆盖的元素。但是不确定效果如何。
-
@ScottMutch 实际上在实施我的测试用例之前没有阅读您的评论,但这正是它的完成方式:)
标签: jquery html mouseover mouseout