计算用逗号分隔的单词

时间:2012-02-02 23:41:21

标签: 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('');
}

我设置间隔使用此功能。注意到,尝试了所有其他功能,如change(),paste()..使用我的扫描仪设备的唯一方法是设置间隔。

问题是,当我输入9个数字时,比如1 ... 9然后想要输入10,当我按1在9之后立即写10时,它会直接发布数据。不等待“,”。如何修改它以等待最后(在这种情况下为第10个)字后的“,”?

5 个答案:

答案 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.看来你正在用寻找可选的最终逗号的正则表达式来破坏自己。