是的,我几乎找到了我所追求但不完全的东西。
给出一个简单的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,我有两个问题:
我需要能够检测到此条目来自扫描程序,因此后面的代码知道搜索数据库的条形码字段,而不是项目标题。显然浏览器不会知道,所以我能想到的唯一方法是按时间去做。扫描仪将比任何人都可以更快地填充字段。
一旦AutoComplete用条形码生成了结果,它显然只会返回一个结果,所以在只返回一个结果的情况下,我希望它自动选择该结果并运行它的select函数根据需要填充其他字段。
(条形码扫描仪有一个TAB终结器,因此在扫描后立即模糊文本字段,然后移动到下一个)
这样的事情会成为可能吗?
如果有人可以孤立地帮助解决问题,那就太酷了。我已经查看了https://github.com/scottgonzalez/jquery-ui-extensions/blob/master/autocomplete/jquery.ui.autocomplete.selectFirst.js获得了B点,但无法使其发挥作用。
注意:如果最坏的情况发生,我可以在后面的代码中使用isNumeri
c检测扫描的条目,但是,我们扫描的一些代码不是数字,显然是正确的UPC代码,但是我们有从产品SKU生成条形码的一些项目,这些可能不是数字。
答案 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或图像或其他东西完成。