onmouseover在内部元素上执行
onmouseover executes on inner elements
我有一个div,它是一些文本的包装器:
<div class="timeSpanWrapper" data-occupied="false">
<span>@day.ToString("HH:mm", new System.Globalization.CultureInfo("da-DK"))</span>
</div>
当我把鼠标放在包装上时,我想执行一个函数:
$(".timeSpanWrapper").on("mouseover", function (evt) {
if (evt.ctrlKey) {
setTimeSlot($(this));
}
});
该函数会被执行,但如果我将<span>
悬停在timeSpanWrapperdiv中,它也会被执行——这不是我想要的,因为该方法将被激发两次。
对此有什么解决方法?
注意:
我尝试了一下建议的答案。当我将鼠标悬停在span上时,该方法不会被执行,但当我再次将span留给父div时,它会被执行,这是一个问题,因为父div是一个中心有一些文本的框。
您可以通过确保目标是绑定元素来确保它不会在子元素上执行
$(".timeSpanWrapper").on("mouseover", function (evt) {
if (evt.ctrlKey && this === evt.target) {
setTimeSlot($(this));
}
});
或者只使用mouseenter事件,在这里似乎更合适
$(".timeSpanWrapper").on("mouseenter", function (evt) {
if (evt.ctrlKey) {
setTimeSlot($(this));
}
});
您可以使用.not()
函数来避免中的跨度
$(".timeSpanWrapper").not(".timeSpanWrapper span").on("mouseover", function (evt) {
if (evt.ctrlKey) {
setTimeSlot($(this));
}
});
之所以会发生这种情况,是因为mouseover事件在其子元素中冒泡。您需要使用mouseenter
来避免这种情况。
尝试在jsfiddle演示中用mouseover更改mouseenter
$(".timeSpanWrapper").on("mouseenter", function (evt) {
$('body').append('<span>entered</span>');
});
相关文章:
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 单击元素两次后执行操作
- toogleClass函数来切换元素类并在事件期间执行某些操作
- 只要用户将鼠标悬停在jQuery中的某个元素上,就可以执行多次单击
- Angular 指令似乎没有使用元素传入的选项执行
- 为什么在ASP.NET Ajax更新面板中执行任何操作后javascript元素都停止工作
- 使用html 5对元素执行自定义表单验证功能
- 执行 If 语句,仅当元素存在时
- 在两个元素的 onrender 事件之后执行函数
- 在将ajax内容应用到元素后执行js函数
- 对未知数量的元素执行Jquery循环
- touchstart和touchend事件引用相同的元素,而事件在不同的元素上执行
- Jquery执行基于元素'的父标记
- 这是关于Jquery/JS的,如果我改变元素's HTML-我可以对它执行其他Jquery/JS操作吗
- jQuery-等待此元素,然后执行1次
- 删除对象时执行元素指令动画的角度方式
- 正在执行元素atrribute中定义的回调
- Javascript在ajax请求后不执行元素