Dart是否在jQuery on()等事件函数中有childSelector?

时间:2014-04-30 06:52:26

标签: dart dart-html

Dart是否在jQuery on()等事件函数中有childSelector?因为只有当鼠标悬停特定元素类型时才需要fire contextmenu事件。

这是我的javascript代码。

 var $contextMenu = $("#context-menu");
 $("body").on("contextmenu", "table tr", function(e) {
 $contextMenu.css({
     display: "block",
     left: e.pageX,
     top: e.pageY });
   return false;
 });

但我不知道如何检查我的Dart代码中是否悬停“table tr”。

 var body = querySelector('body');
 var contextMenu =querySelector('#context-menu');
 // fire in everywhere 
 body.onContextMenu.listen((e) {
    e.preventDefault();
    contextMenu.style.display = 'block';
    contextMenu.style.left = "${e.page.x}px";
    contextMenu.style.top  =  "${e.page.y}px";     
 }

2 个答案:

答案 0 :(得分:1)

问题如下:

$("body")为您提供了一组不会改变的元素。然而,`.on(...,'子选择器')实际上是不好的,因为它会针对每个事件的每个时间的事件目标检查子选择器。

我在这里看到两个解决方案:

第一个是选择所有子节点并将事件侦听器添加到所有元素:

var body = querySelector('body');
body.querySelectorAll('table tr')... onContextMenu...

但是如果稍后将tr插入表中,这将无效。

另一种方法是检查你的活动的目标,看看它是否是你的表格中的tr。我希望这已经有所帮助。如果您需要更详细的帮助,请告诉我们!

此致 罗伯特

答案 1 :(得分:1)

您可以过滤事件:

body.onContextMenu.where((e) => e.target.matchesWithAncestors("table tr"))
    .listen((e) {
   e.preventDefault();
   contextMenu.style.display = 'block';
   contextMenu.style.left = "${e.page.x}px";
   contextMenu.style.top  =  "${e.page.y}px";
});