回车键自动完成(但不在自动选择中)

4

我有一个简单的输入框

按下回车键后,我想要提交它(所在表单)。我使用jQuery,但没有使用任何自动完成扩展,所以只使用浏览器默认的自动完成:

$('#searchfield')
.keypress(function(event) {
        var keycode;
        if (window.event)
            keycode = window.event.keyCode;
        else if (event)
            keycode = event.which;
        else
            return true;

        if (keycode == 13)
            $('#searchForm').submit();
});

这个解决方案存在问题: 当有人(在FF3中)开始输入(例如“stackov”),然后按向下箭头选择提供的选项并敲回车键时,表单被提交了,尽管搜索的是“stackov”,而不是所选的“stackoverflow”。
另外我尝试了:
$('#searchfield')
.change( function() {
   $('#singleSearch').trigger('click');
})

这使我正确地选择了 "stackoverflow",但现在任何离开该字段的操作(例如在输入一些字母后模糊(blur()))都会不自觉地将其发送出去。

对此有任何(最好经过测试的)建议吗?


当您从文本框中按上/下键时,您是否正在使用建议的文本填充文本框?也就是说:按下向下箭头选择建议后,会填充文本框。然后当用户按下回车键时,建议的文本将出现在文本框中。 - Tejs
你是使用表单还是通过AJAX提交的? - Blender
你想在编辑字段时提交它还是在字段失焦时提交?只要输入聚焦,当按下回车键时,你的表单应该自动提交。 - Calum
@Blender:以表单形式提交。 - Frank N
@Calum:我希望自动完成(向下箭头,向下箭头,回车)只需在搜索栏中显示建议的术语(这是浏览器端的功能,我怀疑我对此没有太大影响)。我的问题是,发送发生得太早了...(或者我通过jQuery绑定的回车操作发生在浏览器内部输入自动完成值之前...) - Frank N
1
你有没有考虑使用jQuery UI?http://jqueryui.com/demos/autocomplete/ - Kyle
1个回答

1
嗯,我只能说,允许自动完成“摘要”后稍微延迟提交,可以解决这个问题:
if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
    setTimeout( function() {
        $('#searchForm').submit(); 
    } , 30 );
};

我发现将超时时间设置为1仍足以允许适当的自动完成行为(FF4 / Win)。 - CBono

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接