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";
}
答案 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";
});