我可以使用制表符pluggin向执行一个功能的按钮显示rowContextMenu吗?

问题描述 投票:0回答:1

我们有一个制表符列定义,其中一个是格式化程序创建的按钮

{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。

我希望在我们在任意行中单击鼠标右键时都调用制表器显示的菜单。

我尝试从单元格中,从行中调用触发器...,但我不知道该事件是否可访问,或者我不知道该事件。

谢谢

javascript tabulator
1个回答
0
投票

我不经常使用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开始依赖于不同的事件属性,它将破坏此代码。 (也许您可以从单击中复制原始事件,然后将这些属性传递到自定义事件。不太确定如何做到这一点。)

© www.soinside.com 2019 - 2024. All rights reserved.