【问题标题】:Counting words separated by comma计算以逗号分隔的单词
【发布时间】:2012-02-02 23:41:20
【问题描述】:

我的计数器功能是这样的

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,当我在 9 之后按 1 写 10 时,它会直接发布数据。不等待“,”。如何修改它以在最后一个(在本例中为第 10 个)单词之后等待“,”?

【问题讨论】:

  • 你能详细描述一下过程和你想要做什么。

标签: javascript jquery word counter


【解决方案1】:

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

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

【讨论】:

  • 我已经说过了,它不是键盘,而是扫描仪设备(条形码扫描仪)。所以keyup不起作用。唯一的方法是设置间隔
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这应该可以工作...

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

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

    【讨论】:

      【解决方案4】:

      如果我是你,我会将此代码放入按键处理程序中。这样它只会在您键入新字符时被调用。为防止它过于频繁地运行检查,请使用_.debounce。最后,正如 Andrew 所提到的,",,,,,,,,,,".split(',').length == 11。看起来你正在用寻找可选的最后逗号的正则表达式破坏自己。

      【讨论】:

      • 我已经说过了,它不是键盘,而是扫描仪设备(条形码扫描仪)。所以keyup不起作用。唯一的方法是设置间隔
      【解决方案5】:

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

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

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

      所以,你会得到这样的东西:

      var lastInterval = null
      $(ids).keyPress(function() {
          if(lastInterval != null)
              clearTimeout(lastInterval)
          lastInterval = setInterval(function() {
              // ... your code here
          }, 1000)
      })
      

      这清楚吗?希望对你有帮助:)

      --- 编辑

      好吧,奇怪的是条码扫描器不触发keyPress事件,但以此为前提,你可以检查字符串的变化,当字符串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)
      

      【讨论】:

      • 我已经说过了,它不是键盘,而是扫描仪设备(条形码扫描仪)。所以keyup不起作用。唯一的方法是设置间隔
      • 已编辑 :) 希望它现在有所帮助。无论如何,检查为什么代码条扫描仪没有触发正确的事件。它是通过串口/usb 连接还是作为键盘附件连接?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2022-01-17
      相关资源
      最近更新 更多