Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用逗号分隔的单词计数_Javascript_Jquery_Word_Counter - Fatal编程技术网

Javascript 用逗号分隔的单词计数

Javascript 用逗号分隔的单词计数,javascript,jquery,word,counter,Javascript,Jquery,Word,Counter,我的计数器函数看起来是这样的 function count() { var value = ids.val(); return (value == '') ? 0 : value.replace(/\s,?|,$/g, '').split(',').length; } 然后检查返回值并通过ajax发布数据 if(count() === 10){ ajaxPost(); $(ids).val(''); } 我设置了使用此函数的间隔。注意,尝试了

我的计数器函数看起来是这样的

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个)单词之后等待?

这应该可以

var count = function(str){
  var matches = str.match(/.*?,/g);
  return (matches == null)? 0 : matches.length;
};

您也可以使用keyup或keydown方法来捕获此事件,而不是使用setInterval。

10个带尾随逗号的单词会给您10个逗号,因此,
拆分结果数组中有11个元素(如果逗号是输入的最后一个字符,则最后一个元素将为空)。像检查(count()==11)一样检查它。

您可以检查按下的键是否是逗号,然后在知道最后输入的键是逗号后才运行代码:

$(ids).on('keyup', function (event) {
    if (event.which == 188) {
        if (count(this.value) === 10) {
            ajaxPost();     
            ids.value = '';
        }
    }
});

不确定我是否完全理解了你的问题,但是

是否要等待最后一个“,”以确保扫描仪键入了所有数字?或者你需要得到10,但是间隔发生在扫描仪完成写入之前

如果是第二种情况,我建议您在每次按键事件时重新启动间隔。这样做,您将在按下该键后留出一些时间等待,以防其他任何键也被按下

因此,您将有如下内容:

var lastInterval = null
$(ids).keyPress(function() {
    if(lastInterval != null)
        clearTimeout(lastInterval)
    lastInterval = setInterval(function() {
        // ... your code here
    }, 1000)
})
清楚了吗?希望有帮助:)

---编辑

好吧,奇怪的是条形码扫描器没有触发按键事件,但以此为前提,你可以检查字符串的变化,当字符串在N个周期内没有变化时,你触发你的代码

在本例中,您将确保字符串保持相等至少1000ms(1000ms和1999ms之间)


如果我是你,我会把这段代码放到一个按键处理程序中。这样,只有在键入新字符时才会调用它。要防止它过于频繁地运行检查,请使用。最后,正如Andrew提到的,“,,,,,,,,”.split(,).length==11。看起来你正在用寻找可选的最后一个逗号的正则表达式破坏自己。

请你一步一步地描述这个过程以及你想做什么。我已经说过了,这不是键盘,而是扫描仪(条形码扫描仪)。所以keyup不起作用。唯一的方法是设置intervalI,它不是键盘,而是扫描仪(条形码扫描仪)。所以keyup不起作用。唯一的方法是设置intervalI,它不是键盘,而是扫描仪(条形码扫描仪)。所以keyup不起作用。唯一的办法是设置intervaledited:)希望现在能有所帮助。无论如何,请检查代码条扫描仪为什么没有触发正确的事件。它是通过串行/usb连接还是作为键盘连接?
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)