2012-06-01 16 views
18

非表示のテキストボックス要素にフォーカスを設定するにはどうすればよいですか?JavaScriptを使用して非表示のテキストボックスフィールドにフォーカスを設定

私は、これはここに

alert(document.activeElement.id); returns null. 

私はこのフィールドが可視になったとき、上記のスクリプトがうまく働い動作しない、

document.getElementById("textControl_fd_component_JSON_TASK_NStext64").focus; 

を使用してみました。しかし。

どこが間違っているのですか?

+0

私はあなたが隠しフィールドに焦点を当てることができないことを証明したと思います。なぜこれをしたいのですか?より良いアプローチがあるかもしれません。 –

答えて

0

少なくともIEではこれが許可されているとは思われません。私はjQuery's focus pageからこの情報を得ました。

39

あなたが本当にこれを実行する必要がある場合は、透明の箱を作るには、隠されていない:

opacity:0; 
filter:alpha(opacity=0); 

また、ユーザーが誤ってクリックしないようにしたい場合は、単に内部の入力を置きます

width: 0; 
overflow: hidden; 

を持つdivがしかし、最も確かに多分​​/keypressイベントを使用して、あなたが欲しいものを行うには良い方法があります。 Apsillersの答えを使用して

+0

ありがとう、ちょっと苦労して私を救っただけです:) – Bren

+0

これは良いことですが、理想的には、表示されない( 'display:none;')DOMノードに置くことができる 'focusable'属性がありますフォーカス(これに対処するjavascriptがあるかどうかに関係なく、ユーザーに何かを見えるようにする)。 – AJP

+0

この動作の公式リファレンスはどこかにありますか?これは 'visibility:hidden'にも当てはまりますか?または単に 'display:none'ですか? – jbyrd

0

、関与これと同じような状況のために私のセットアップ:

  1. 位置に親のdiv:相対;
  2. 子フォーム要素位置:絶対; z-インデックス:0;不透明度:0;フィルター:アルファ(不透明度= 0);
  3. 第2の子要素位置:絶対; z-index :(値> 0)(透明入力をカバーするように配置されています)。

アスパイラーの回答は正しい質問ですが、これが必要なときの具体的な例を挙げたいと思います。

具体的には、「ファンシー」入力(つまり、ラジオ/チェック要素、選択要素)を作成する任意の種類のスクリプト/プラグインを使用している場合、フォーム要素を非表示にすることができます。しかし、スクリプトやプラグインがうまく書かれていないと、キーボードのアクセシビリティが損なわれる可能性があります。すべての要素にフォーカスを持たせることでフォームの流れを維持することで、ウェブサイトユーザーにとって多くの頭痛を軽減できます。

0

回避策が必要な場合や不透明度attrを変更できない場合は、いくつかのjを追加できます。

/* bind a click handler to your trigger */ 
jQuery('#your-search-trigger').on('click', function searchIconEventhandler (event) { 
    /* in case your field is fading, cheat a little (check css transition duration) */ 
    setTimeout (function timeoutFunction() { 
     /* show the cursor */ 
     jQuery('#your-search-input').focus(); 
    }, 100); 
}); 
関連する問題