大きなフォームをより使いやすくしようとしています。特殊なケースで使用されるフィールドがいくつかあり、これらは必要に応じて公開するためのリンクを持つアコーディオン コンテナ内に隠されています。
ただし (少なくとも Chrome では) フィールドをタブで移動すると、ビューからは非表示になっているがキーボード入力でアクセスできるフィールドにフォーカスが置かれることになります。
これを処理する Good™ 方法は何でしょうか? jQuery を使用して、display != none に基づいて tabindex を設定し、アコーディオン イベントが発生したときに再設定しますか? CSS によって隠されているフィールドがフォーカスを受け取ると、囲んでいるアコーディオンが開かれるのでしょうか?
これは、以下の html を使用して問題を示す jsfiddle です。タブは、表示からアコーディオン リンク、非表示のテキスト入力、最後に表示されるようになります: http://jsfiddle.net/2EfXM/
<p class="file_info">
<label>Visible
<input type="text" name="vis1" id="vis1" class="date" value="" />
</label>
</p>
<div class="accordion" id="accordion2">
<div class="accordion-group">
<div class="accordion-heading"> <a class="accordion-toggle accordion-arrow" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne">
Show more fields
</a>
</div>
<div id="collapseOne" class="accordion-body collapse out">
<h5>Source/Use Metadata</h5>
<p class="file_info">
<label>Hidden:
<input type="text" name="default_original_source" id="default_original_source" class="" value="" />
</label>
</p>
</div>
</div>
</div>
<p class="file_info">
<label>Visible
<input type="text" name="vis2" id="vis2" class="date" value="" />
</label>
</p>
興味深い補足事項: display:none
IE 9 で jQuery 検証を使用すると、エラーが発生しました。隠しフィールドにエラーが発生しました。
SCRIPT5007: Unable to get value of the property 'call': object is null or undefined
jquery.validate.js, line 1174 character 5
いくつかの調査の後、これが最終的な解決策でした:
.collapse input {
visibility: hidden;
}
.collapse.in input {
visibility:visible;
}