我的计数器功能看起来像
function count() {
var value = ids.val();
return (value == '') ? 0 : value.replace(/\s,?|,$/g, '').split(',').length;
}
然后检查返回值并通过ajax发布数据
if(count() === 10){
ajaxPost();
$(ids).val('');
}
我设置间隔使用此功能。注意到,尝试了所有其他功能,如change(),paste()..使用我的扫描仪设备的唯一方法是设置间隔。
问题是,当我输入9个数字时,比如1 ... 9然后想要输入10,当我按1在9之后立即写10时,它会直接发布数据。不等待“,”。如何修改它以等待最后(在这种情况下为第10个)字后的“,”?
答案 0 :(得分:1)
带有尾随逗号的10个单词为您提供10个逗号,因此,split
结果数组中有11个元素(如果逗号是输入的最后一个字符,则最后一个元素将为空)。请查看if (count() === 11)...
。
答案 1 :(得分:1)
您可以检查按下的键并查看它是否为逗号,然后只有在知道输入的最后一个键是逗号后才运行您的代码:
$(ids).on('keyup', function (event) {
if (event.which == 188) {
if (count(this.value) === 10) {
ajaxPost();
ids.value = '';
}
}
});
答案 2 :(得分:0)
这应该有用......
var count = function(str){
var matches = str.match(/.*?,/g);
return (matches == null)? 0 : matches.length;
};
您也可以使用keyup或keydown方法来捕获此事件,而不是使用setInterval。
答案 3 :(得分:0)
不确定我是否完全理解了您的问题,但是......
你想等到最后一次","确保扫描仪输入所有数字?或者你需要得到10,但间隔发生在扫描仪完成写入之前?
如果是第二种情况,我建议您在每次keyPressed事件时重新启动间隔。这样做,只要按下按键等待以防其他任何按键被按下,你就会给它一些时间。
所以,你会有这样的事情:
var lastInterval = null
$(ids).keyPress(function() {
if(lastInterval != null)
clearTimeout(lastInterval)
lastInterval = setInterval(function() {
// ... your code here
}, 1000)
})
这是否清楚?希望它有所帮助:)
---编辑
好吧,条码扫描器没有触发keyPress
事件很奇怪,但以此为前提,您可以检查字符串中的更改,以及字符串何时没有#&# 39; t改变N个周期,你会触发你的代码。
在此示例中,您将确保字符串保持等于至少 1000毫秒(介于1000毫秒和1999毫秒之间)。
var lastString = ""
setInterval(function() {
if(lastString == $(ids).val()) { // So, if the value remains the same for 2 cycles, the second one your code will be evaluated
// ... your code here
}
lastString = $(ids).val()
}, 1000)
答案 4 :(得分:0)
如果我是你,我会将此代码放入按键处理程序中。这样,只有在键入新字符时才会调用它。为防止它过于频繁地运行检查,请使用_.debounce。最后,正如Andrew提到的那样,“,,,,,,,,,,”。split(',')。length == 11.看来你正在用寻找可选的最终逗号的正则表达式来破坏自己。