2013-04-30 3 views
8

바코드 스캐너를 연구 중입니다. 내가 사용하고있는 바코드 스캐너는 플러그 앤 플레이 방식으로 커서를 놓을 때마다 자동으로 코드를 스캔합니다. 하지만 내가 원하는 것은 내가 웹 페이지마다의 특정 텍스트 상자에 검색 할 수 있는지 여부를 내 양식 그래서 매번이바코드를 특정 텍스트 상자로 스캔

<input type="text" name="txtItem" id="txtItem" class="m-wrap w-120" tabindex="6"> 

<input type="text" name="itemId" id="itemId" class="m-wrap w-120" tabindex="6"> 

<input type="text" name="itemName" id="itemName" class="m-wrap w-120" tabindex="6"> 

<input type="text" name="itemQty" id="itemQty" class="m-wrap w-120" tabindex="6"> 

과 같은 경우 스캐너를, 코드 예를 들어

를 읽고 있다는 것입니다 내가 현재 포커스가 어디에 있든 관계없이 항상 텍스트 상자에 나타나는 코드를 스캔하십시오.

아무도 나를 안내하거나 해결책을 찾을 수 있습니까?

+0

왜 PHP와 관련이 있습니까? 바코드 스캐너의 설명서를 읽었습니까? 바코드 스캐너가 브라우저에 코드를 삽입하는 "방법"을 생각해 봤습니까? 자바 스크립트를 사용해 보셨나요? – HamZa

+2

내 나쁜 .. 난 태그를 수정했습니다 .. – Sriniwas

답변

9

당신은 jQuery를

여기
$("input").on("paste",function(e){ 
    $("#txtItem").focus(); 
}); 

를 사용하여 "붙여 넣기"이벤트를 청취해야하는 것은 예입니다 http://jsfiddle.net/T6VdS/

+0

모르는 사람에게. 스캐너는 키보드의 역할을합니다. 그들이 코드를 스캔 할 때 화면을 지나치게됩니다. –

+0

나는 데이터를 입력하기 전에 스캐너가 붙여 넣기 이벤트를 호출합니까? – Sriniwas

+0

Great ** + 1 ** 및 @Tom Elmore와 마찬가지로 붙여 넣은 데이터가 바코드인지 확인하기 위해 정규식을 사용할 수 있습니다. – HamZa

0

내가 스캐너 그냥 키보드 같은 텍스트 입력 장치로 간주되고있다 생각 텍스트를 출력합니다. 그 텍스트를 식별 할 수있는 방법이 없다면 쉬운 해결책이 없다는 대답이 될 것입니다.

수신하는 코드가 항상 같은 형식이고 정규 표현식으로 식별 할 수있는 경우 입력을 버퍼링하여 올바른 상자로 이동할 수 있습니다 (스캔 한 코드가 들어가기를 기대합니다) 인간이 입력하는 것보다 훨씬 더 빠른 일련의 키를 누름) 그 위에 정규 표현식을 실행하면 ...

0

스캐너가 출력하는 텍스트에 접두어를 추가하면 (거의 모든 스캐너에서이 작업을 수행 할 수 있습니다) 모든 입력은 스캐너를 알고있는 접두어로 시작합니다.

이 같은 일을 할 수있는 jQuery로 입력을 잡으려고 :

//presuming the scanner acts like a keyboard 
$(document).keypress(function (e) { 

    //do something to match the 'key presses' 

    //focus to the input and put the rest of the string in there 

}); 
17

일부 바코드 스캐너가 또 다른 입력 장치와 같은 역할을합니다. 이 양식은 타이머를 사용하여 입력되는 속도를 모니터하지 않는 한 키보드와 스캐너가 입력하는 정보의 차이를 알 수 없습니다.

일부 스캐너는 값을 집중된 컨트롤에 "붙여 넣기"- 다른 개별 키 스트로크를 보냅니다.

http://jsfiddle.net/PhilM/Bf89R/3/

당신이이 전체 양식에 대한 위임하게 적응하고 입력을 제거 할 수 있습니다 : 문자가 하나의 컨트롤을 개별적으로 전송 될 때 입력이 발생하면

다음 JSFiddle는 감지 할 수 컨트롤에서 그것을 입력하고 올바른 양식에 넣어.

/* 
    This code will determine when a code has been either entered manually or 
    entered using a scanner. 
    It assumes that a code has finished being entered when one of the following 
    events occurs: 
     • The enter key (keycode 13) is input 
     • The input has a minumum length of text and loses focus 
     • Input stops after being entered very fast (assumed to be a scanner) 
*/ 

var inputStart, inputStop, firstKey, lastKey, timing, userFinishedEntering; 
var minChars = 3; 

// handle a key value being entered by either keyboard or scanner 
$("#scanInput").keypress(function (e) { 
    // restart the timer 
    if (timing) { 
     clearTimeout(timing); 
    } 

    // handle the key event 
    if (e.which == 13) { 
     // Enter key was entered 

     // don't submit the form 
     e.preventDefault(); 

     // has the user finished entering manually? 
     if ($("#scanInput").val().length >= minChars){ 
      userFinishedEntering = true; // incase the user pressed the enter key 
      inputComplete(); 
     } 
    } 
    else { 
     // some other key value was entered 

     // could be the last character 
     inputStop = performance.now(); 
     lastKey = e.which; 

     // don't assume it's finished just yet 
     userFinishedEntering = false; 

     // is this the first character? 
     if (!inputStart) { 
      firstKey = e.which; 
      inputStart = inputStop; 

      // watch for a loss of focus 
      $("body").on("blur", "#scanInput", inputBlur); 
     } 

     // start the timer again 
     timing = setTimeout(inputTimeoutHandler, 500); 
    } 
}); 

// Assume that a loss of focus means the value has finished being entered 
function inputBlur(){ 
    clearTimeout(timing); 
    if ($("#scanInput").val().length >= minChars){ 
     userFinishedEntering = true; 
     inputComplete(); 
    } 
}; 


// reset the page 
$("#reset").click(function (e) { 
    e.preventDefault(); 
    resetValues(); 
}); 

function resetValues() { 
    // clear the variables 
    inputStart = null; 
    inputStop = null; 
    firstKey = null; 
    lastKey = null; 
    // clear the results 
    inputComplete(); 
} 

// Assume that it is from the scanner if it was entered really fast 
function isScannerInput() { 
    return (((inputStop - inputStart)/$("#scanInput").val().length) < 15); 
} 

// Determine if the user is just typing slowly 
function isUserFinishedEntering(){ 
    return !isScannerInput() && userFinishedEntering; 
} 

function inputTimeoutHandler(){ 
    // stop listening for a timer event 
    clearTimeout(timing); 
    // if the value is being entered manually and hasn't finished being entered 
    if (!isUserFinishedEntering() || $("#scanInput").val().length < 3) { 
     // keep waiting for input 
     return; 
    } 
    else{ 
     reportValues(); 
    } 
} 

// here we decide what to do now that we know a value has been completely entered 
function inputComplete(){ 
    // stop listening for the input to lose focus 
    $("body").off("blur", "#scanInput", inputBlur); 
    // report the results 
    reportValues(); 
} 

function reportValues() { 
    // update the metrics 
    $("#startTime").text(inputStart == null ? "" : inputStart); 
    $("#firstKey").text(firstKey == null ? "" : firstKey); 
    $("#endTime").text(inputStop == null ? "" : inputStop); 
    $("#lastKey").text(lastKey == null ? "" : lastKey); 
    $("#totalTime").text(inputStart == null ? "" : (inputStop - inputStart) + " milliseconds"); 
    if (!inputStart) { 
     // clear the results 
     $("#resultsList").html(""); 
     $("#scanInput").focus().select(); 
    } else { 
     // prepend another result item 
     var inputMethod = isScannerInput() ? "Scanner" : "Keyboard"; 
     $("#resultsList").prepend("<div class='resultItem " + inputMethod + "'>" + 
      "<span>Value: " + $("#scanInput").val() + "<br/>" + 
      "<span>ms/char: " + ((inputStop - inputStart)/$("#scanInput").val().length) + "</span></br>" + 
      "<span>InputMethod: <strong>" + inputMethod + "</strong></span></br>" + 
      "</span></div></br>"); 
     $("#scanInput").focus().select(); 
     inputStart = null; 
    } 
} 

$("#scanInput").focus(); 

위의 코드는 복사/붙여 넣기를 지원하지 않지만, 우리의 상황이에서 :

<form> 
    <input id="scanInput" /> 
    <button id="reset">Reset</button> 
</form> 
<br/> 
<div> 
    <h2>Event Information</h2> 
    Start: <span id="startTime"></span> 
    <br/>First Key: <span id="firstKey"></span> 
    <br/>Last Ley: <span id="lastKey"></span> 
    <br/>End: <span id="endTime"></span> 
    <br/>Elapsed: <span id="totalTime"></span> 
</div> 
<div> 
    <h2>Results</h2> 
    <div id="resultsList"></div> 
</div> 

샘플 바이올린을위한 자바 스크립트는 다음과 같습니다

바이올린을위한 테스트 HTML이있다 어쨌든 일어날 것 같지 않다.

+1

아직 주위에 있다고 생각하지 않지만 멋진 답변에 감사드립니다. 오늘 바코드 입력을 처리해야했고 코드가 입력을 제어하는 ​​방법을 다루었습니다. 두드러진! –

0

가장 좋은 방법은 데이터를 스캔 코드에 넣는 것입니다. 거의 모든 스캐너가 이러한 프로그래밍을 지원합니다. 대부분은 제어 바코드를 통해 프로그래밍 할 수 있으며 매뉴얼로 인쇄됩니다.

Symbol 스캐너의 경우 Ctrl + Char, Honeywel 블루투스 스캐너의 경우 F9 데이터 F10을 사용합니다. Wasp 스캐너는 Ctrl + 문자 조합을 지원하지 않습니다. 그래서 나는 Wasp에 대해 [데이터] 형식을 사용합니다.

그런 다음 프로그램에서 첫 번째 기호 ([char])를 검색 상자에 커서를 놓습니다. 마지막 문자 (내 경우에는 char)를 받으면 검색 루틴에 내용을 보냅니다.

관련 문제