我有一些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键,锚标签获得焦点,因此,如果您立即回车,你将运行closeZoom()函数。这工作正常。
我想要做的是如果你在文本框中,并且你按下回车键,它的行为方式与按Tab键时一样。所以,我有一个函数来做到这一点:
function EnterToTabHack(event) {
if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
$(".channel").blur();
$("#closeLink").focus();
}
}
模糊部分工作正常,在文本框中的值被写回到我的视图模型,因为我想要的,但重点不我的链接结束。击中输入两次应该接受文本框中的值(这是),然后关闭窗口(它不)。
任何想法这里可能是错误的?我看不到任何错误消息,但显然重点不在于锚点链接上,如果我点击标签(注意:只是模糊似乎也没有做到这一点)。
编辑:我已经添加了更多的html,因为它可能或可能不相关。特别是,我使用KnockoutJS进行数据绑定,并且我认为这使得不能使用几个人建议的jQuery绑定类型(事件),或者至少,如果我要使用它们,我会必须重新绑定然后每次“currentFactor”更改,因为我认为什么淘汰赛正在做的是销毁表中的所有内容,并在该部分更改时重新创建它。
另一个编辑:首先,非常感谢所有试图帮助到目前为止!我真的很感激你花时间看看这个。
我打过来,把一起JS小提琴:
起初我很困惑,因为,当然,它工作得很好!然后我添加了img的样式,看起来用这种方式使用精灵是什么打破它。如果你从CSS中删除所有的img样式,它可以正常工作。与他们在一起,我不能以编程方式集中它。
以前有人看过类似的东西吗?
你的小提琴可以工作,但它使用jQuery来连接按键事件。当我使用with子句时(似乎重新评估with子句删除所有jQuery有线事件),这似乎不适用于knockoutjs。 – 2012-08-14 18:36:44
如果您在图像中添加alt标签(至少在小提琴中),您的原始代码将起作用,只要您一按即输入一次即可运行 – Huangism 2012-08-14 20:27:21
@MattBurland使其工作的唯一方法是将原始的onkeydown更改为onkeyup为输入标签。其他任何事情都会触发点击事件1点击太早或根本没有点击。这是没有绑定使用jQuery的事件,以避免冲突 – Huangism 2012-08-14 21:00:40