Tabsを用いてタブを切り替えたときに, 入力フィールドにフォーカスさせる
こういうケースが多い気がする*1のでメモ.
<ul id="tabs"> <li><a href="#foo">Foo</a></li> <li><a href="#bar">Bar</a></li> </ul> <div id="foo"> <input type="text" /> </div> <div id="bar"> <input type="text" /> </div>
$('#tabs').tabs({ select: function(event, ui) { $(ui.panel).find(':input:first').focus(); } });
tabsselectのイベント発生時にフォーカスさせるようにしてあげればいいんだけど, コレではうまくいかない…… どうやらこの段階でフォーカスを当てる要素が非表示(親の非表示が受け継がれている)で, 非表示だとフォーカスが当てられないらしい. ui.panelからui-tabs-hideというクラスを取り除いてあげればいいけど, パネルの高さがけっこうあると, 画面がちらつくコトがあってよくない. というコトで実行を関数の後にしてやる.
$('#tabs').tabs({ select: function(event, ui) { setTimeout(function() { $(ui.panel).find(':input:first').focus() }, 0); } });
まぁ妥当な解決かなぁ.
*1:特にコールバックを用るような仕組みのとき