0

問題
ページに多数の Dojo コンポーネントがあります。ユーザーが入力のようなコンポーネントからグリッドのようなコンポーネントにタブ移動しようとすると、JavaScript の「コントロールにフォーカスを移動できません」というエラーが表示されます。ユーザー ベースは IE6 を使用します。

解決策
DojoX グリッド レイアウトの最初の要素は非表示にできません。非表示の場合、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>orを使用してください。<div>

于 2008-11-26T16:02:26.240 に答える
3

個人的には、この種の行動は少し面倒だと思います。ユーザーがそのフィールドに集中することを禁止しているのはなぜですか?

より良い解決策は、データを入力する準備ができるまでフィールドを非表示/無効にすることです。フィールドが無効になっている理由を説明するテキストも必要です。

編集:あなたが投稿したエラーメッセージにはGoogleでいくつかの結果がありますが、これは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

コメントで問題が明確になった後、ユーザーがタブキーで要素にフォーカスできないようにする必要があることを理解しました。要素に追加してみてください:

tabindex="-1"

例:

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

負のタブインデックスの詳細: wai-aria の紹介

編集: ARIA の詳細: http://www.w3.org/WAI/intro/aria

于 2008-11-26T16:30:41.877 に答える
1

エラーメッセージについて: Fake's tankから:

「ドキュメントに競合するIDがある可能性があります。また、IE 7と以前のバージョンは、名前属性をIDのように扱うべきだと考えるだけであることを思い出してください。」

まず、これは IE 固有のバグです。次に、ID を変更します。これは、以前に一部の HP html ベースのソフトウェアに影響を与えたもののようであり、ユーザーが IE6 から IE7 にアップグレードしたときに現れました。

フォーカスを無効にすることについての質問について - タグで type=hidden を使用して不要な入力を非表示にするだけで、問題はなくなります。人々のタブ操作を台無しにすることはありません。これは、Windows アプリよりも html で改善された点の 1 つです。

物語の教訓:

  • 適切に行う
  • マイクロソフトは Web のことでがらくたです
  • 標準的な GUI の動作を台無しにしないでください
于 2008-11-26T16:57:36.067 に答える
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 に答える
0
<input name="z" onfocus="this.blur()"/>
于 2008-11-26T15:58:16.110 に答える
0

コンポーネント要素に値 -1 の tabindex 属性を与えます

于 2008-11-26T16:25:43.153 に答える
0

解決策
DojoX グリッド レイアウトの最初の要素は非表示にできません。非表示の場合、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 に答える