我有一些看起来像这样的 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();
}
}
模糊部分工作正常,文本框中的值按我的意愿写回我的视图模型,但焦点并没有最终落在我的链接上。按两次回车应该接受文本框中的值(确实如此),然后关闭窗口(它没有)。
知道这里可能有什么问题吗?我没有看到任何错误消息,但显然焦点不在锚链接上,就像我点击标签时那样(注意:只是模糊似乎也没有这样做)。
编辑:我添加了更多的 html,因为它可能相关,也可能不相关。特别是,我使用 KnockoutJS 进行数据绑定,我认为这使得无法使用几个人建议的 jQuery 绑定(事件)类型,或者至少,如果我要使用它们,我会每次“currentFactor”更改时都必须重新绑定,因为我认为淘汰赛正在做的是破坏桌子主体中的所有内容并在该部分更改时重新创建它。
另一个编辑:首先,非常感谢到目前为止所有试图提供帮助的人!我真的很感谢你花时间来看看这个。
我玩弄了一个 JS Fiddle:
起初我很困惑,因为当然,它工作得很好!然后我为 img 添加了样式,似乎以这种方式使用 sprite 会破坏它。如果您从 css 中删除所有 img 样式,它工作正常。有了他们,我无法以编程方式集中注意力。
以前有人见过这样的吗?