高效地从DOM元素中删除onmouseover事件

4

我有一个包含许多onmouseover事件的HTML页面。这些事件与a、img、td和div标签相关联。

假设页面已加载,最有效的JavaScript方法是什么,以删除所有onmouseover事件。

我不使用jQuery。

(任务是在使用触摸设备访问页面时删除不需要的工具提示)


1
所有的 onmouseover 都指向同一个中央函数来显示工具提示吗? - Yuriy Galanter
是的,但我不能禁用工具提示,因为它在某些onclick事件中使用。 - soupagain
1
你是否确实验证了这需要优化吗?目前移除事件的延迟时间是多少? - Travis J
3个回答

1

一个简单的函数循环遍历所有元素就可以解决问题。这个函数适用于所有div元素:

function removeMouseOver() {
    var divs = document.body.getElementsByTagName('div');
    for (var i = 0; i < divs.length; i++) {
        divs[i].onmoseover = function() {};
    }
}

另一种方法是将mouseover提示功能定义为变量。

var tooltip = function(){// put your tooltip code here };
var donothing = function(){};

//to turn tooltips on:-
onmouseoverfunc = tooltip;

//to turn tooltips off:-
onmouseoverfunc = donothing;

在元素中
document.getElementById('mydiv').onmouseover = function(){mouseoverfunc();};

你的回答是最完整的,但我使用的是另一个回答! - soupagain

1

只需为所有具有mouseover事件的元素添加一个唯一的类,然后进行循环

get=document.getElementsByClassName("classhere");
for(i=0; i<get.length; i++){
    get[i].removeEventListener("mouseover", yourFunction, false);
   }

替换yourFunctionclasshere,告诉我它是否有效


这种解决方案快速而且高效。谢谢。 - soupagain

1

由于您所有的事件处理程序都指向同一中心函数 - 您可以在该函数内禁用工具提示。

如果此函数处理onmouseoveronclick事件- 您可以检查event.type,并仅在其等于mouseover时禁用工具提示。

演示:http://jsfiddle.net/cLHgK/1/


很不幸,我确实需要删除onmouseover事件,因为当尝试点击元素时,iPhone会捕获它们并处理不正确。唯一的解决方案是完全删除它们。 - soupagain
真的吗?即使你的代码明确声明在鼠标悬停时不执行任何操作,只是返回空值?好奇怪。 - Yuriy Galanter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接