我有一些类似于这样的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>
现在,当你在文本框中按Tab键时,锚点标签会获得焦点,因此如果你立即按Enter键,将运行closeZoom()函数。这个很有效。
我想要的是,如果你在文本框中按Enter键,它将像按Tab键一样运作。所以我有一个函数来实现这个:
function EnterToTabHack(event) {
if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
$(".channel").blur();
$("#closeLink").focus();
}
}
模糊部分工作正常,文本框中的值按预期写回到我的视图模型中,但焦点没有停留在我的链接上。连续按两次回车键应该接受文本框中的值(它确实这样做),然后关闭窗口(它没有)。
你有什么想法可能出了什么问题吗?我没有看到任何错误消息,但显然焦点不在锚链接上,就像我按tab键一样(注意:仅模糊似乎也行不通)。
编辑:我添加了更多的html,因为它可能与此相关。特别是,我正在使用KnockoutJS进行数据绑定,我认为这使得不可能使用几个人建议的jQuery绑定(事件),或者至少,如果我要使用它们,我必须每次“currentFactor”更改时重新绑定它们,因为我认为Knockout正在销毁表格主体中的所有内容,并在该部分更改时重新创建它们。
另一个编辑:首先,非常感谢所有试图帮助到目前为止的人!我真的很感激你们花时间来查看这个问题。
我玩了一下,组合了一个JS Fiddle: 起初我很困惑,因为当然它可以正常工作!然后我添加了img的样式,似乎使用sprites的方式破坏了它。如果你从css中删除所有的img样式,它就可以正常工作。但是加上这些样式后,我无法通过编程来聚焦它。 有人以前见过这样的情况吗?