【问题标题】:dojo connect mouseover and mouseoutdojo 连接 mouseover 和 mouseout
【发布时间】:2010-04-13 13:23:58
【问题描述】:

当设置到onmouseoveronmouseout 的dojo 连接,然后在鼠标悬停时添加内容时,dojo 会立即触发onmouseout 事件,因为有新内容。示例:

dojo.query(".star").parent().connect("onmouseover", function() {
    dojo.query("span", this).addContent("<img src='star-hover.jpg'>");
}).connect("onmouseout", function() {
    dojo.destroy(dojo.query("img", this)[0]);
});

parent()&lt;td&gt;.star 是跨度。每当用户悬停表格单元格时,我想添加悬停图像。只要光标不悬停在图像上,它就可以工作,因为这会导致一些严重的闪烁。这是故意的吗?有没有办法解决它?

编辑:刚刚用 jQuery 尝试了类似的东西,它按预期工作(至少正如我预期的那样。)

$(".star").parent().hover(function() {
    $("span", this).append("<img src='star-hover.jpg'>");
}, function() {
    $("img", this).remove();
});

这将在悬停时显示图像,并且仅在将光标移到表格单元格之外时才移除。

【问题讨论】:

  • 我宁愿从一开始就将图像放在所有 span.star 节点中,然后在鼠标悬停时向 节点添加一种“.hovered”类,并添加一个 css 规则仅在“td.hovered”下显示 span.star 内的图像。
  • 当然可以,但有时会在悬停状态下添加元素。这肯定不是正确的行为吗?

标签: dojo


【解决方案1】:

在您的示例中它与 jQuery 一起使用的原因是 .hover 使用规范化的 onmouseenter/onmouseleave 事件。如果您要连接到这些,它将在 Dojo 中按预期工作。此外,Dojo 的 .hover 模拟将是:

dojo.NodeList.prototype.hover = function(over, out){
    return this.onmouseenter(over).onmouseleave(out || over);
}

那么你只需:

dojo.query("...").hover(function(e){ .. }, function(e){ .. });

mouseeneter 和 mouseover 之间的区别是您看到立即 onmouseout 触发行为的原因。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签