【问题标题】:How do I ignore a keyEvent in Javascript?如何忽略 Javascript 中的 keyEvent?
【发布时间】:2010-12-28 05:01:17
【问题描述】:

我在 YUI 中有一个 DataTable。我试图让表忽略所有 keyEvents。我试过这些方法:

YAHOO.util.Event.addListener(singleSelectDataTable, "keydown", function(oEvent) {
    YAHOO.util.Event.stopPropagation(oEvent); 
});

YAHOO.util.Event.preventDefault(singleSelectDataTable.tableKeyEvent);    

singleSelectDataTable.subscribe('tableKeyEvent', function(oArgs) { 
  YAHOO.util.Event.preventDefault(oArgs.event); 
});

我查看了几个 YUI 示例来拦截点击事件,但它们并没有类比到这个特定场景。如果有帮助,我创建了一个独立的 HTML 测试文件:http://pastebin.com/khfR4Stk。根本问题是我们不想在表格中支持向上箭头键或向下箭头键;它是一个滚动表,为了使其正常工作,一旦选择超出“显示窗口”,我们就必须调整滚动拇指。

我能想到的唯一其他解决方案是订阅 tableKeyEvent,然后如果按键是向上箭头,则取消选择新选择的行,选择上一行,对向下箭头进行适当的模拟(基本上撤消按键刚刚所做的)。这似乎不是正确的解决方案……

【问题讨论】:

    标签: javascript dom-events yui-datatable


    【解决方案1】:

    tableKeyEvent 是在 向上/向下箭头键被处理之后引发的。因此,试图阻止该事件将无济于事。

    查看 DataTable 小部件的_onTbodyKeydown 函数,我注意到将选择模式设置为无效模式会禁用键箭头键导航。幸运的是,它似乎并没有破坏其他选择处理。至少在你的例子中没有。

    所以只需将 selectionMode:"single" 更改为 selectionMode:"" 就可以了 :-) (当然不能保证这在未来的版本中会起作用

    【讨论】:

    • 这不是合适的解决方案,因为它会禁止鼠标在表格中导航。
    • 我说得太早了。我的实际代码比给出的示例更复杂。给出的示例使用以下行:singleSelectDataTable.subscribe("rowClickEvent", singleSelectDataTable.onEventSelectRow);我在我的实际代码中使用它: singleSelectDataTable.subscribe("rowClickEvent", function(oArgs) {singleSelectDataTable.onEventSelectRow(oArgs.event, oArgs.target); 后一个代码不起作用;有没有办法选择行即使 selectionMode 关闭?
    • 如果您使用singleSelectDataTable.onEventSelectRow(oArgs),鼠标导航确实有效(onEventSelectRow 文档似乎不正确)。但在这种情况下,使用“标准”选择模式,允许使用 Ctrl 和 Shift 键选择多行。您可以通过提供一个假的空事件对象来解决此问题:singleSelectDataTable.onEventSelectRow({'target': oArgs.target, 'event': {}});
    【解决方案2】:

    尝试创建此 onclick 的等效项

    function noenter(evt)
    {
        var k = evt.keyCode||evt.which;
        return k != 13;
    }
    

    GetgetCharCode 的语法并告诉脚本当它接收到输入时,它需要拒绝它。

    【讨论】:

    • 对不起,不清楚您创建该 onclick 的等效项是什么意思。能给个小代码示例吗?
    【解决方案3】:

    你不能只添加一个返回 false 到 keydown 事件的事件处理程序吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2016-03-17
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      相关资源
      最近更新 更多