2012-02-02 204 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