0

问题
我在一个页面上有许多 Dojo 组件。当用户尝试从类似输入的组件切换到类似网格的组件时,我收到 JavaScript“无法将焦点移动到控件”错误。用户群使用 IE6。

解决方案
DojoX Grid 布局中的第一个元素不能隐藏。如果它被隐藏,您会收到一个 JavaScript“无法将焦点移动到控制”错误。为了解决这个问题,我添加了一行 # 来显示。见下文。

  var gridLayout = [
    new dojox.grid.cells.RowIndex({ name: "row #", 
                                    width: 2, 
                                    styles: "text-align: right;"
                                 }),
    {
      field: "ele_id",
      name: "Element ID",
      styles: "text-align:right;",
      width:5,
      hidden:"true"           
    },
    {
      field: "ele_nm",
      name: "Element Name",
      styles: "text-align:left;",
      width:8          
    }
  ];
4

10 回答 10

7

防止标签可能会干扰使用屏幕阅读器浏览您网站的视力不佳的用户。

于 2008-11-26T16:01:19.910 回答
4

如果输入 Y 不接受用户输入,则不要将其设为输入字段!

如果您只是将其用于值显示,请使用样式<span><div>代替。

于 2008-11-26T16:02:26.240 回答
3

我个人认为这种行为有点烦人。为什么要禁止用户专注于该领域?

更好的解决方案是隐藏/禁用该字段,直到准备好将数据输入其中。您还应该有一些文字来解释为什么该字段被禁用。

编辑:您发布的错误消息在谷歌上有一些结果,但似乎它可能是任何数量的问题,这个http://www.francoisfaubert.com/2008/03/06/cant-move-focus-to -control/听起来有可能。检查您的 HTML 以查看页面上是否有其他具有相同 ID 的控件。

于 2008-11-26T16:00:02.643 回答
2

您可以将 Input-Z 设置为禁用控件。然后,当用户进入 Input-Y 并填写它时,将 Input-Z 更改为启用。你怎么能这样做:

<input id="Input-x" type="text" />
<input id="Input-y" type="text" onChange="document.getElementById('Input_Z').removeAttribute('disabled');" />
<input id="Input-z" type="text" disabled />
于 2008-11-26T16:00:17.947 回答
1

您必须处理 keydown 事件并侦听字符 9(这是制表符)。要使事件无效,您只需在用户按下字符 9 时返回 false。

function handleKeyDown(e)

{

var keynum;

var keychar;

var numcheck;

if(window.event) // IE

{

keynum = e.keyCode;

}

else if(e.which) // Netscape/Firefox/Opera

{

keynum = e.which;

}

return keynum != 9; `` }

于 2008-11-26T15:56:55.003 回答
1

在您的评论澄清问题后,我了解您需要用户不能使用 Tab 键聚焦元素。尝试添加到元素:

tabindex="-1"

例如:

<div id="mygrid" tabindex="-1"> <!-- Some stuff here --> </div>

有关负标签索引的更多信息:introduction-to-wai-aria

编辑:关于 ARIA 的更多信息:http: //www.w3.org/WAI/intro/aria

于 2008-11-26T16:30:41.877 回答
1

关于错误信息:来自Fake's tank

“很可能你的文档中有冲突的 id。另外,请记住 IE 7 和以前的版本认为 name 属性应该像 id 一样对待。”

因此,首先,这是一个特定于 IE 的错误。其次,去改变你的身份证。它似乎是之前困扰一些惠普基于 html 的软件的问题,并且在用户从 IE6 升级到 IE7 时出现。

关于禁用焦点的问题 - 只需隐藏标签中 type=hidden 不需要的任何输入,它们将不再是问题。永远不要乱用人们的标签 - 这是在 Windows 应用程序上使用 html 改进的一件事。

故事的寓意:

  • 正确地做
  • 微软在网络东西上是废话
  • 不要乱用标准的 GUI 行为
于 2008-11-26T16:57:36.067 回答
0
<input name="z" onfocus="this.blur()"/>
于 2008-11-26T15:58:16.110 回答
0

给组件元素一个 tabindex 属性,其值为 -1

于 2008-11-26T16:25:43.153 回答
0

解决方案
DojoX Grid 布局中的第一个元素不能隐藏。如果它被隐藏,您会收到一个 JavaScript“无法将焦点移动到控制”错误。为了解决这个问题,我添加了一行 # 来显示。见下文。

  var gridLayout = [
    new dojox.grid.cells.RowIndex({ name: "row #", 
                                    width: 2, 
                                    styles: "text-align: right;"
                                 }),
    {
      field: "ele_id",
      name: "Element ID",
      styles: "text-align:right;",
      width:5,
      hidden:"true"           
    },
    {
      field: "ele_nm",
      name: "Element Name",
      styles: "text-align:left;",
      width:8          
    }
  ];
于 2009-04-25T02:51:54.320 回答