【问题标题】:YUI Datatable Blocks Enter Event of Other Components At A PageYUI 数据表块在页面上输入其他组件的事件
【发布时间】:2013-02-07 12:40:06
【问题描述】:

我在通过按 Enter 从组合框中选择一个选项时遇到问题。存在两个页面,其中一个页面使用 YUI 数据表,而另一个不使用。我只有在带有 YUI 数据表的页面上才有这个问题。经过一番挖掘,我确信 YUI 数据表会导致页面上所有其他组件的输入键事件出现问题。如果我从页面中删除 YUI 数据表,它可以正常工作。

我正在为 yui-data 表使用 datatable-beta.js,我们无法用更新的版本替换它。与这个库有关的东西太多了,所以公司不想要它。

由于这个问题,我无法使用 enter 在简单的“html 选择标记”处选择选项。

我们如何解决这个问题?有人遇到过关于 YI 库的类似问题吗?

【问题讨论】:

    标签: javascript dom-events yui-datatable


    【解决方案1】:

    您可以覆盖页面中的方法,这样您就不需要更改原始脚本。

    只需像下面那样覆盖它(e.keyCode==13 已删除),您对该页面的输入问题就会得到解决。

    <script type="text/javascript>
    YAHOO.widget.DataTable.prototype._onDocumentKeydown=function(e,oSelf)
    {
      if((e.keyCode==27))
      {
            oSelf.cancelEditorData();
      }
    
    }
    </script>
    

    【讨论】:

    • 不错的主意,我没有碰其他任何地方。我刚刚覆盖了那个页面。现在可以了,谢谢。
    【解决方案2】:

    我注释掉了一些代码块以找出导致此问题的代码。我通过这种方式消除了很多代码部分并到达了这一行:

    YAHOO.util.Event.addListener(document,"keydown",this._onDocumentKeydown,this);
    

    这一行位于 datatable-beta.js 中,我不知道他们为什么要这样做。他们正在处理所有 dom 元素的 keydown 事件。这就是为什么我不能按回车键从组合框中选择一个选项。 Combobox 只是一个示例,我的意思是我们不能对页面上的任何组件使用 enter。 Handler方法的代码如下:

    YAHOO.widget.DataTable.prototype._onDocumentKeydown=function(e,oSelf)
    {
          if((e.keyCode==27))
          {
                oSelf.cancelEditorData();
          }
          if(e.keyCode==13)
          {
                YAHOO.util.Event.stopEvent(e);
                oSelf.saveEditorData();
          }
    }
    

    他们正在处理转义和输入字符。我不想评论这些行。它可能会影响其他代码块。我确实找到了问题,但您仍然可以提出解决方案。因为,即使我发现了问题,我仍在寻找在不更改原始脚本的情况下使用回车键的最佳方式。

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 1970-01-01
      • 2015-12-26
      • 2018-12-04
      • 1970-01-01
      • 2012-08-15
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多