【问题标题】:Trigger Ctrl+z & Ctrl+y keypress on button click在按钮单击时触发 Ctrl+z 和 Ctrl+y 按键
【发布时间】:2023-09-19 07:47:02
【问题描述】:

我为 Ctrl+zCtrl+y 提供了两个单独的按钮。我希望在单击按钮时执行 Ctrl+zCtrl+y 功能。

为了实现这一点,我试图在按钮单击时触发 Ctrl+zCtrl+y但它们没有被触发。

到目前为止我写的代码:

case "undo":
    var press = jQuery.Event("onkeydown");
    press.ctrlKey = true;
    press.keyCode = 90;
    jQuery(".excellentableEditSpread").trigger(press);
    break;

case "redo":
    var press = jQuery.Event("onkeydown");
    press.ctrlKey = true;
    press.keyCode = 89;
    jQuery(".excellentableEditSpread").trigger(press);
    break;

【问题讨论】:

  • 从事件类型文本中删除on,用法应该类似于jQuery.Event("keydown")
  • 如果您打算触发浏览器“撤消/重做”行为,我猜您无法使用 keyevent 触发器来实现。 (就像你不能用模拟的 keyevent 填充输入文本一样)

标签: javascript jquery undo-redo


【解决方案1】:

你可以试试这个:

function doUndo(){
  document.execCommand('undo', false, null);
}

function doRedo(){
  document.execCommand('redo', false, null);
}

【讨论】:

    【解决方案2】:

    这将像ctrl+zctrl+y 一样工作。

    case "undo":
        document.dispatchEvent(new KeyboardEvent('keydown', {'key': 'z', 'ctrlKey': true}));
        break;
    
    case "redo":
        document.dispatchEvent(new KeyboardEvent('keydown', {'key': 'y', 'ctrlKey': true}));
        break;
    

    【讨论】: