我们有一个制表符列定义,其中一个是格式化程序创建的按钮
{title:"input", field:"blank", width:30, frozen:true, responsive:0,formatter:customFormatter2}
进入格式化程序,我们创建一个按钮
var customFormatter2 = function (cell, formatterParams) {
var $button=$('<button>').text('Hola')
$button.click(function(){
$(cell.getElement()).trigger('contextmenu')
})
return $button.get(0);
}
此外,我们还在制表符中创建了rowContextmenu。
我希望在我们在任意行中单击鼠标右键时都调用制表器显示的菜单。
我尝试从单元格中,从行中调用触发器...,但我不知道该事件是否可访问,或者我不知道该事件。
谢谢
我不经常使用jQuery,但我认为唯一缺少的是防止单击事件在contextmenu
事件之后传播,该事件隐藏了菜单。这样的事情应该可以工作,但是我还必须将pageX和pageY添加到我的自定义事件中,以便Tabulator可以计算显示菜单的位置。我不确定如何在jQuery中执行此操作。
$button.click(function(event){
event.stopImmediatePropagation();
$(cell.getElement()).trigger('contextmenu');
});
或者没有jQuery,肯定可以使用,
function customFormatter(cell, formatterParams){
const button = document.createElement('button');
button.textContent = "Hola";
button.addEventListener('click', (event) => {
event.stopImmediatePropagation();
const myEvent = new Event('contextmenu');
myEvent.pageX = event.pageX;
myEvent.pageY = event.pageY;
cell.getRow().getElement().dispatchEvent(myEvent);
})
return button;
}
这里是没有jQuery的完整示例。https://jsfiddle.net/nrayburn/guxkw394/101/
请注意这一点。因为我们正在创建一个自定义事件,所以它不包含真实事件所具有的所有常规属性。如果Tabulator开始依赖于不同的事件属性,它将破坏此代码。 (也许您可以从单击中复制原始事件,然后将这些属性传递到自定义事件。不太确定如何做到这一点。)