2012-02-02 221 views
-2
计数话

我计数功能看起来像用逗号分隔

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

+0

你能不能一步一步描述程序和你想做什么。 – Joseph 2012-02-02 23:55:54

回答

1

您可以检查按下的键,看看它是否是一个逗号,然后只运行代码已知的最后一个键输入的是一个逗号后:

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

我已经告诉过,它不是键盘,它是扫描仪设备(条形码扫描仪)。所以keyup不起作用。唯一的办法是设置间隔 – heron 2012-02-03 00:19:00

0

这应该工作...

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

您也可以或许用KEYUP或方法的keydown捕获这个事件,而不是使用的setInterval。

1

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

0

不知道如果我理解你的问题完全,但...

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

如果是第二种情况,我建议您在每个keyPressed事件中重新开始间隔。这样做,您会在按下按键之后等待一段时间,以防其他任何按键被按下。

所以,你有这样的事情:

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

这是清楚了吗?希望它能帮助:)

---编辑

好吧,这是奇怪的是条形码扫描仪不会触发keyPress事件,但以此为前提,你可以检查字符串中的变化,而当字符串在N个周期内没有改变,你触发你的代码。

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

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) 
+0

我已经告诉过,它不是键盘,它是扫描仪设备(条形码扫描仪)。所以keyup不起作用。唯一的办法是设置编辑间隔 – heron 2012-02-03 00:20:08

+0

:)希望它现在有所帮助。无论如何,请检查为什么代码条扫描器不会触发正确的事件。它是通过串行/ USB连接还是键盘连接? – 2012-02-03 00:31:24

0

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

+0

我已经告诉过,它不是键盘,它是扫描仪设备(条形码扫描仪)。所以keyup不起作用。唯一的办法是设置间隔 – heron 2012-02-03 00:19:30