次のような HTML があります。
<div id="zoomed" style="display:none; position:absolute;">
<a href="#" alt="close" id="closeLink" onclick="closeZoom();" tabindex="2"><img alt="close" style="border-style:none" class="close" id="closeButton" src="Images/trans.png"/></a>
<div class="zoomParent">
<table>
<tbody data-bind="with: currentFactor">
<tr><td class="zIngHeader" colspan="3">
<span data-bind="text: FactorName"></span>
</td>
</tr>
<tr>
<td class="zMin" data-bind="text: formatValues(Min)"></td>
<td><input type="text" data-bind="value: currentValue" class="channel" onkeydown="EnterToTabHack(event);" tabindex="1"/></td>
<td class="zMax" data-bind="text: formatValues(Max)"></td>
</tr>
<tr><td colspan="3" class="graphCell" data-bind="animateColor: $root.statusColor"><div id="zoomPlot" class="zoomPlotStyle"></div></td></tr>
</tbody>
</table>
</div>
</div>
ここで、テキスト ボックス内でタブ キーを押すと、アンカー タグがフォーカスされるので、すぐに Enter キーを押すと、関数 closeZoom() が実行されます。これはうまくいきます。
私がやりたいのは、テキストボックスにいてEnterキーを押すと、タブを押した場合と同じように動作することです。だから私はこれを行う機能を持っています:
function EnterToTabHack(event) {
if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
$(".channel").blur();
$("#closeLink").focus();
}
}
ぼかし部分は正常に機能し、テキストボックスの値はビューモデルに書き戻されますが、リンクに焦点が当てられません。Enterキーを2回押すと、テキストボックスの値が受け入れられ(受け入れられます)、ウィンドウが閉じられます(受け入れられません)。
ここで何が間違っているのでしょうか?エラーメッセージは表示されませんが、タブを押した場合のようにアンカーリンクに焦点が合っていないことは明らかです(注:ぼやけているだけではうまくいかないようです)。
編集:関連する場合と関連しない場合があるため、html をもう少し追加しました。特に、私はデータ バインディングに KnockoutJS を使用しています。そのため、複数の人が提案している (イベントの) jQuery バインディングのタイプを使用できなくなっていると思います。 「currentFactor」が変更されるたびに再バインドする必要があります。ノックアウトが行っていることは、テーブルの本体のすべてを破壊し、その部分が変更されたときにそれを再作成することだと思うからです。
別の編集:まず、これまで助けようとしてくれたすべての人に本当に感謝します! お時間を割いてご覧いただき、誠にありがとうございます。
私は遊んで、JS Fiddleをまとめました:
もちろん、うまく機能したので、最初は戸惑いました。次に、img のスタイルを追加しましたが、この方法でスプライトを使用すると、それが壊れているようです。css からすべての img スタイルを削除すると、正常に動作します。それらを使用すると、プログラムで集中することはできません。
前にそのようなものを見た人はいますか?