以角度触发dblclick事件

时间:2017-01-18 14:41:45

标签: javascript jquery angularjs

我试图以角度触发元素上的双击事件。

        $timeout(function () {
                var elem = document.getElementById(id);
                angular.element(elem).trigger("dblclick")
        }, 1);

具有事件侦听器的元素:

        var nodeEnter = node.enter().append("g")
        .attr("id", function (d) {
            if (d.id)
              return d.id;
            else
              return Math.random();
        })
        .on("dblclick", function () {
            console.log("dblclick");
        });

什么都没发生。我在这里做错了什么?

BTW,它进入调用触发器的函数。 触发器不会调用dblclick。

3 个答案:

答案 0 :(得分:0)

wrap函数中必须有$timeout行。

$timeout(function() {
    var elem = document.getElementById(id);
    angular.element(elem).triggerHandler("dblclick");
},0);

$timeout()进程是常规Javascript setTimeout函数  默认情况下,在其末尾触发$apply()。你也可以  指示$timeout()不要调用$apply()函数。

答案 1 :(得分:0)

  

如果要触发双击元素,请执行以下操作。

<h1 ng-dblclick="count = count + 1" ng-init="count=0">Welcome</h1>

答案 2 :(得分:0)

问题是我的代码中的“.on”方法属于d3库,它对事件“__ ontype”使用不同的命名约定。

请看这个链接:

https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#on

此约定与jquery或angular的jqlite“trigger()”或“triggerHandler()”不对应。

使用原生javascript解决了问题:

        var elem = document.getElementById(id);
        var event = new MouseEvent("dblclick");
        elem.dispatchEvent(event);

另外,在d3版本4中有一个指定的api用于调度事件:

https://github.com/d3/d3-selection#selection_dispatch