【问题标题】:in javascript onmouseout, how to make work if cursor outside block?在javascript onmouseout中,如果光标在块外,如何工作?
【发布时间】:2011-08-16 15:40:15
【问题描述】:

有一个显示模态 div 的菜单项。希望创建的 div 在用户将光标移出 时自动关闭,但是当最初创建模态 div 时光标 离开它,所以光标首先需要在里面移动。

当我登录到控制台时,onmouseout 触发器被触发,其中e.targete.currentTarget 都是 div 本身,事件触发两次,首先是 进入 div,然后离开 div。

首先,这对我来说没有意义 - 为什么会发生这种情况?第二,这里有没有标准的逻辑可以使用?


所有的html都生成了 这是一些创建模态并附加mouseout触发器的代码 // 代码从菜单创建模态 div 得到:函数(e){ util.popup(E.h4("维护菜单:"), E.ul( E.a( '#', maintenance.users, 'Users (Logins)' ), E.a('#', maintenance.employees, 'Employees'), E.a('#', maintenance.skills, '技能类型'), E.a('#', maintenance.etps, '费用类型'), E.a('#', maintenance.menus, '菜单项')), E.div(E.button(maintenance.done, "s.width:90%", "Finished"))); util.popup_dom().addEventListener('mouseout',util.popout()); },

popup() 创建模态并将其放置在 BODY 中,popout() 将其删除。


解决方案(根据第一个答案 - 谢谢!)使用mouseover 设置mouseout

: util.popup(...); var outSet = false; // 是否设置了 mouseout 触发器 util.popup_dom().addEventListener('mouseover',function(e) { 如果(!outSet){ 设置超时(函数(){ util.popup_dom().addEventListener('mouseout',function(e){util.popout();} ), 200); 输出 = 真; } });

【问题讨论】:

  • 分享 HTML,并告诉我们您希望它在 mouseout 之前和之后的样子。
  • @Shef - 这里是代码 sn-p - 不知道这是你所追求的

标签: javascript mouseevent


【解决方案1】:

你只能注册onmouseout监听器onmouseover

var closeModalDiv = function () { ... };

addEventListener(modalDiv, 'mouseover', function () {
    addEventListener(modalDiv, 'mouseout', closeModalDiv);
});

(假设您正在使用名为 addEventListener 的自定义跨浏览器事件方法;您必须将其调整为您正在注册的事件。)

【讨论】:

  • 我认为mouseover 事件反复触发。 afaik 没有办法拉动或以其他方式知道存在的触发器
  • 1.如果您正在使用一个体面的跨浏览器事件方法,它不会为同一个事件多次向同一个元素添加相同的函数。 2.如果你没有使用匿名函数,你可以mouseover监听器执行一次后移除它。
  • 听从了你的建议,但添加了一些东西:关于是否添加了 mouseout 触发器的标志,以防止它被重置,并在 mouseover 后 20 毫秒添加触发器到防止它过早发射。 - 谢谢!
  • 使用addEventListener - 这不会多次添加监听函数?
  • 称为addEventListener 的W3C 方法不会添加重复函数。但是,IE6-8 使用attachEvent,它 多次添加相同的功能。这就是为什么您需要一个包装函数来规范化两个事件模型(阅读:修复 IE)。因为我比较懒,建议你直接用jQuery的bind或者mouseover方法。
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多