使用tuanvt在被接受的答案中提出的想法,我编写了一个能够完成任务的jQuery插件。
我跟踪用户按上下、PageUp和PageDown键的时间,以确定他们是否在自动完成框中。所有其他键都意味着他们已经离开了它。
我确保只对文本框应用这些规则:所有其他输入元素都会正常工作。
Opera已经非常好地实现了我想要实现的功能,所以我不会在该浏览器中强制执行我的规则 - 否则用户将不得不按两次Enter键。
在IE6、IE7、IE8、Firefox 3.5.5、Google Chrome 3.0、Safari 4.0.4、Opera 10.00中进行了测试。
它可以在jquery.com上作为SafeEnter插件下载。为了方便起见,发布1.0版本的代码如下:
(function($)
{
$.fn.listenForEnter = function()
{
return this.each(function()
{
$(this).focus(function()
{
$(this).data('safeEnter_InAutocomplete', false);
});
$(this).keypress(function(e)
{
var key = (e.keyCode ? e.keyCode : e.which);
switch (key)
{
case 13:
if (!$(this).data('safeEnter_InAutocomplete') || !$(this).is('input[type=text]') || $.browser.opera)
{
$(this).trigger('pressedEnter', e);
}
$(this).data('safeEnter_InAutocomplete', false);
break;
case 40:
case 38:
case 34:
case 33:
$(this).data('safeEnter_InAutocomplete', true);
break;
default:
$(this).data('safeEnter_InAutocomplete', false);
break;
}
});
});
};
$.fn.clickOnEnter = function(target)
{
return this.each(function()
{
$(this)
.listenForEnter()
.bind('pressedEnter', function()
{
$(target).click();
});
});
};
})(jQuery);