2011-01-06 14 views
4

바코드 스캐너가 부착 된 라이브러리 시스템 용 웹 응용 프로그램을 작성하고 있습니다. 스캐너의 입력은 키보드 입력으로 표시되며 항상 ~~[\d]+.[\d]+~~의 형식입니다 (예 : ~~470.002~~).jQuery : 키보드에서 자동 스캐너 입력을 듣고 있습니까?

스캐너 입력을위한 jQuery 리스너를 설정하고 jQuery 초보자입니다. 모든 키보드 입력을 청취해야하지만 스캐너 입력을 들었을 때와 스캐너 입력이 끝난 경우에만 작업을 수행하십시오.

이것은 지금까지 내가 (즉,하지 매우)있어과 같습니다

//Global functions: call on all pages. 
$(document).ready(function() { 
    // Listen for scanner input. 
    $(window).keypress(function(e) { 
     var key = e.which; 
     if (key==126) {. 
      alert('tilde'); 
      // How to listen for the correct input? 
      // check_out_book(); 
     } 
    }); 
}); 

내가 원하는 형식으로 입력을 듣고 유지하는 가장 좋은 방법은 무엇입니까? check_out_book()에 전화하기 전에 마지막 두 개의 물결표를 듣고 싶습니다.

휴먼 타이피스트와 자동화 된 스캐너 입력을 구분하기 위해 일시 ​​중지가있는 경우 첫 번째 물결표를 듣고 '중지'하고 싶습니다. jQuery가이를 수행 할 수있는 방법이 있습니까?

모든 포인터는 대단히 감사하겠습니다! 고맙습니다.

답변

6

나는 지금까지받은 내용을 저장하고 그것이 유효한지 확인함으로써 이것을하고 싶습니다. 그렇지 않은 경우,받은 것을 버리고 다시 시작합니다

$(document).ready(function(){ 
    var input = '', 
     r1 = /^~{1,2}$/, 
     r2 = /^~{2}\d+$/, 
     r3 = /^~{2}\d+\.$/, 
     r4 = /^~{2}\d+\.\d+$/, 
     r5 = /^~{2}\d+\.\d+~{1}$/ 
     r6 = /^~{2}\d+\.\d+~{2}$/; 

    $(window).keypress(function(e) { 
     input += String.fromCharCode(e.which); 

     if (r1.test(input) || r2.test(input) || r3.test(input) || r4.test(input) || r5.test(input)) { 
      // input is valid so far, continue 
     } else if (r6.test(input) { 
      // input is valid and complete 
      check_out_book(); 
     } else { 
      // input is invalid, start over 
      input = ''; 
     } 
    }); 
}); 

당신은 두 가지로 모든 regexps '에 결합 할 수 있지만, 나는이 방법이 더 읽기 쉬운 것 같아요.

+1

Genius. 감사. – AP257

4

바코드 스캐너가 입력 필드를 채우는 데 사용되었는지 여부를 감지하고 다음 필드로 포커스를 옮기는 자바 스크립트를 작성했습니다.

내 코드는 "스캐너 입력을위한 jQuery 리스너를 설정하고 jQuery 초보자입니다. 모든 키보드 입력을 수신해야하지만, 키보드 입력을 수신하면 액션을 수행해야합니다. 스캐너 입력이 완료된 경우에만 표시됩니다. " I는 바코드 스캐너 항목 (F1 & F2)에 대해 의도 된 클래스의 bcode '인 두 개의 필드를

<input type="text" class="bcode" id="f1" onkeydown="typeSpeed(new Date().getTime());" onblur="typeSpeedReset();" onfocus="typeNextField('f2');" /> 
<input type="text" class="bcode" id="f2" onkeydown="typeSpeed(new Date().getTime());" onblur="typeSpeedReset();" onfocus="typeNextField('f3');" /> 
<input type="text" id="f3" /> 

: 여기

는 입력 필드에 대한 HTML이다. 세 번째 필드는 일반 입력 (f3)을위한 필드입니다. 필드 f1 & f2 'typeSpeed'함수에 키를 누를 때 현재 타임 스탬프를 보내고 (2) 필드가 포커스를 얻었을 때 선택할 다음 필드의 ID를 보내십시오 (1). 이 필드는 필드가 포커스를 잃을 때 'typeSpeedReset'함수 호출을 트리거합니다. 여기

가 작동하게하는 자바 스크립트/jQuery를 수 있습니다 :

$(function(){ 
    var typingTimeout; 
    $('.bcode').keypress(function(e){ 
     if (typingTimeout != undefined) clearTimeout(typingTimeout); 
     typingTimeout = setTimeout(isBarcode, 500); 
    }); 
}); 

var ts0 = 0, ts1 = 0, ts2, nf; 

function typeSpeed(time) { 
    ts0 = (ts0 == 0) ? time : 0; 
    var ts3 = ts1; 
    ts1 = time - ts0; 
    ts2 = ts1 - ts3;  
} 

function typeSpeedReset() { ts0 = 0; ts1 = 0; } 

function typeNextField(nextfield) { nf = nextfield; } 

function isBarcode() { 
    if(ts2 < 20 && ts1 != 0) { $('#'+nf).focus(); } 
} 

무엇 발생하는 함수에 의해 정량화 키 입력 사이의 시간이다 'typeSpeed'. 나는 실험을 통해 (키보드를 매시거나 키를 누르고있어) 가장 빠른 사람의 입력에 키 스트로크 사이에서 약 33ms의 지연이 있음을 알았다. 일반적으로 10ms 또는 그 이하의 지연을 테스트하는 데 사용한 바코드 스캐너.

입력이 일시 중지되었을 때를 감지하려면 'bcode'클래스의 필드에 시간 초과가 설정됩니다. 이 시점에서 지연이 평가됩니다. 20ms보다 작 으면 바코드 스캐너가 사용 된 것으로 가정하고 다음 필드에 초점이 맞춰집니다.

이 코드가 작성된 프로젝트는 포커스가있을 때 필드의 배경색을 변경하고 필드의 오른쪽에 작은 바코드 그래픽을 표시함으로써 한 걸음 더 나아갑니다. 따라서 사용자는 해당 필드에 반응하여 바코드 스캐너 입력 용.

0

바코드 스캐너를 감지하므로 this link을 확인하십시오. 특정 입력에 집중할 필요가 없습니다.

+0

외부 리소스에 대한 링크가 권장됩니다.하지만 링크 주변에 컨텍스트를 추가하여 동료 사용자가 그것이 무엇이며 왜 존재하는지 알 수 있도록하십시오. 대상 사이트에 도달 할 수 없거나 영구적으로 오프라인 상태가되는 경우 중요한 링크의 가장 중요한 부분을 항상 인용하십시오. –

관련 문제