检测输入自动填充字段所需的时间,如果只找到一个项目则自动选择

时间:2011-11-11 17:38:33

标签: jquery autocomplete barcode

是的,我几乎找到了我所追求但不完全的东西。

给出一个简单的jQUery调用Autocomplete

    $(".autoItem").each(function () {
        var id = $(this).attr("id");
        var itemNumber = id.replace('item', '');
        $(this).autocomplete({
            source: "jsonOut/products.aspx",
            minLength: 2,
            select: function (event, ui) {
                $('#price' + itemNumber).val(ui.item.price);
                $('#id' + itemNumber).val(ui.item.id);
            }
        });
    });

哪种方式很可爱,由于我的应用,我现在正常复杂化。

这是用于在商店中进行销售的网络表单。文本框可以通过两种方法填充:

A)按正常方式打字。
B)使用条形码扫描仪扫描代码。

如果是A,一切都很好,自动完成功能与自动完成功能完全相同。

如果是B,我有两个问题:

  1. 我需要能够检测到此条目来自扫描程序,因此后面的代码知道搜索数据库的条形码字段,而不是项目标题。显然浏览器不会知道,所以我能想到的唯一方法是按时间去做。扫描仪将比任何人都可以更快地填充字段。

  2. 一旦AutoComplete用条形码生成了结果,它显然只会返回一个结果,所以在只返回一个结果的情况下,我希望它自动选择该结果并运行它的select函数根据需要填充其他字段。

  3. (条形码扫描仪有一个TAB终结器,因此在扫描后立即模糊文本字段,然后移动到下一个)

    这样的事情会成为可能吗?

    如果有人可以孤立地帮助解决问题,那就太酷了。我已经查看了https://github.com/scottgonzalez/jquery-ui-extensions/blob/master/autocomplete/jquery.ui.autocomplete.selectFirst.js获得了B点,但无法使其发挥作用。

    注意:如果最坏的情况发生,我可以在后面的代码中使用isNumeri c检测扫描的条目,但是,我们扫描的一些代码不是数字,显然是正确的UPC代码,但是我们有从产品SKU生成条形码的一些项目,这些可能不是数字。

2 个答案:

答案 0 :(得分:1)

您是否使用delay选项进行jQueryUI自动完成? http://jqueryui.com/demos/autocomplete/#option-delay

这应该将人与机器分开,只对人类进行自动完成。


只要它不是单品销售......

使用javascript捕获条形码字段上的回车事件,并通过返回false来阻止表单提交。

答案 1 :(得分:0)

对...

我并不热衷于回答我自己的问题,但是那些帮助过这个的人,非常感谢。我并没有完全得到我需要的东西,但是你一如既往地指出了我正确的方向。

最终变得非常简单......经过几个小时摆弄焦点()模糊()更改()和各种标识符!

@Teddy你的提示和答案几乎都做到了。

条形码阅读器默认有一个回车符作为扫描后立即产生的终止符。我不确定它是否会起作用,但是浏览器确实选择了Enter按键,所以我可以这样做:

$('.findProduct').live('keypress', function (e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code == 13) { 
        // call a load function to get details from bar code
    };
});

$('.findProduct').live('focus', function () { findProduct() }); // findProduct is the AutoComplete function

正如@Teddy所说,AutoComplete中的延迟功能确保这对AutoComplete没有任何影响,只要扫描程序发送了Enter终结符,我就可以让jQuery调用我需要的数据。

在框中手动输入时,自动完成功能正常。

那么,接下来的一些建议,你认为我应该在自动完成功能完成之后禁用Enter键以避免混淆,同样,通过某种方式禁用自动完成功能(尚未解决)?

编辑:我应该说,表单不再有提交按钮,提交将由可点击的div或图像或其他东西完成。