2013-04-30 16 views
8

Bar kod tarayıcıları üzerinde çalışıyorum. Kullandığım barkod tarayıcı bir tak-kullan türü ve imleci yerleştirdiğiniz her yerde kodu otomatik olarak tarar. Ama ne ben istiyorum ben bir web sayfası her şey üzerinde belirli metin kutusuna bunu tarayabilir olsun benim form yüzden sürekli buBarkodu belirli bir metin kutusuna tarama

<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"> 

gibi görünüyorsa benim tarayıcı, bir kod örn için

okur olmasıdır i Mevcut odak noktam nerede olursa olsun her zaman txtitem metin kutusunda görünmesi gereken bir kodu tarayın.

Herkes bana rehberlik edebilir veya burada bir çözüm bulmama yardım edebilir mi?

+0

Ve bu neden PHP ile ilgili? Bu barkod tarayıcının kılavuzunu okudun mu? Barkod tarayıcının, kodu tarayıcınıza yerleştirdiği "nasıl"? Javascript kullanmayı denediniz mi? – HamZa

+2

Benim kötü .. etiketlerini düzelttim .. – Sriniwas

cevap

9

Sen jQuery

İşte
$("input").on("paste",function(e){ 
    $("#txtItem").focus(); 
}); 

kullanarak "macun" olayı dinlemek için gereken bir örnektir: http://jsfiddle.net/T6VdS/

+0

Bilmeyenler için. Tarayıcılar klavye işlevi görür. Kodları taradıklarında ekrana geçerler. –

+0

i almadım .. tarayıcı verileri girmeden önce macun olayını çağırır mı? – Sriniwas

+0

Harika ** + 1 ** ve @Tom Elmore gibi, yapıştırılan verilerin bir barkod olup olmadığını kontrol etmek için bir regex kullanabiliriz. – HamZa

0

Ben tarayıcı sadece bir klavye gibi bir metin giriş cihazı olarak görülüyor düşünürdüm ve çıktı metni. Bu metni tanımlamanın bir yolu olmadığı sürece, cevabın, kolay bir çözüm olmadığı şeklinde olması muhtemeldir.

Aldığınız kod her zaman aynı formdaysa ve normal bir ifadeyle tanımlanabilirse, girişin bir şekilde arabelleğe alınmasıyla doğru kutuya taşıyabilirsiniz (taranan kodun gelmesini beklerdim) bir insan tarafından girilenden çok daha hızlı olan bir dizi tuş basımı) ve bunun üzerinde bir normal ifadeyi çalıştırıyor ...

0

Tarayıcının çıkardığı metne (hemen hemen tüm tarayıcılar bunu yapmanıza izin verecek) bir önek ekleyip herhangi bir giriş tarayıcıyı tanıdığınız önekle başlar.

Eğer böyle bir şey yapabilir jquery ile giriş yakalamak için:

//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

Bazı Barkod Tarayıcılar sadece başka bir giriş cihazı gibi hareket ederler. Form, ne kadar hızlı girildiğini izlemek için bir zamanlayıcı kullanmadığınız sürece, klavye ile tarayıcı tarafından girilen bilgiler arasındaki farkı söyleyemez.

Bazı tarayıcılar değerleri odaklanmış kontrole "yapıştırır" - diğerleri her bir tuş vuruşunu gönderir.

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

Bu da tüm form için bir temsilci olmak için adapte girişi kaldırmak olabilir: karakterler tek kumanda üzerindeki tek tek gönderildiğinde giriş oluştuğunda

aşağıdaki JSFiddle tespit edebiliyor Kontrolten girdi ve doğru forma yerleştirildi.

/* 
    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(); 

Yukarıdaki kod kopyala/yapıştır desteklemez, ama bizim durum bu:

<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> 

örnek keman için JavaScript geçerli:

keman test html şudur zaten olması olası değildir.

+1

Hala etrafta olduğunu düşünmüyorum, ama harika cevabın için sana teşekkür etmek istedim. Bugün barkod girişleri ile uğraşmak zorunda kaldım ve kodunuz girdinin kontrolünü nasıl ele alacağımı, hatta yapacağımdan daha fazlasını da içeriyordu. Olağanüstü! –

0

En iyi yol, taranan koda verilerinin yerleştirilmesidir. Hemen hemen tüm tarayıcılar bu programlamayı destekler. Birçoğu, manuel olarak basılan kontrol barkodları ile programlanabilir.

Honeywel bluetooth tarayıcısı için Ctrl + Char Symbol tarayıcı, F9 verileri F10 verilerini kullanıyorum. Wasp tarayıcı Ctrl + karakter kombinasyonunu desteklemiyor. Bu yüzden, Wasp için [Data] formatını kullanıyorum.

Ardından, ilk sembolünü (programda [char]), imleci arama kutusuna konumlandıracağımı söylüyorum. Son karakteri aldığımda (durumumda) char) içeriğini arama rutine gönderir.

İlgili konular