【问题标题】:What is this event handler doing?这个事件处理程序在做什么?
【发布时间】:2012-10-02 17:00:40
【问题描述】:

我尝试过检查 DOM 等,但不确定为什么将 '.tooltip' 附加到处理程序中。如果删除它不会有任何影响,并且似乎没有任何重要价值:

    g.selectAll("circle")
        //
        //why is .tooltip appended here?
        //
        .on("mouseover.tooltip", function(d) {
        d3.select("text#" + d.line_id).remove();
        d3.select("#chart")
            .append("text")
            .text(d.late_percent + "%")
                .attr("x", time_scale(d.time) + 10)
                .attr("y", percent_scale(d.late_percent) - 10)
                .attr("id", d.line_id);
    });

非常感谢任何澄清。

【问题讨论】:

    标签: javascript d3.js event-handling dom-events


    【解决方案1】:

    这是一个命名空间

    http://api.jquery.com/on/

    http://docs.jquery.com/Namespaced_Events

    "jQuery 提供了一个名为命名空间事件的概念:只需添加一个 声明事件时的类名。然后你可以参考 带有取消绑定和触发的命名空间事件。”

    $('.class').bind('click.namespace', function(){}); 
    $('.class').trigger('click.namespace');
    $('.class').unbind('click.namespace');
    

    【讨论】:

    • 这是正确的,但请注意,OP 使用 jQuery - 他使用的是 D3,它提供了类似的事件命名空间。
    • 太棒了!谢谢 Jan ;) 解决了!
    【解决方案2】:

    在这种情况下,正如D3 documentation for selection.on 中所述,它只是为同一事件注册多个侦听器的一种方式。例如,如果要为mouseover 注册两个侦听器,则需要使用.on("mouseover.foo",....on("mouseover.bar",...

    否则,如果您只使用两次.on("mouseover",..,您将替换已注册的mouseover 侦听器,而不是添加新侦听器。 tooltip 部分没有特殊含义,它只是一个标识符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多