Question: I have an HTML input

```
<input type="text" id="txtInput">

```

and I need to disable all keyboard keys for input, only to allow barcode scanners to get the data of the barcode and fill it with the input.

I tried "readonly" and "disabled" and javaScript keydown, but all those solutions disable everything including barcode scanners too.

Is there's any way for doing this?

Answer: 
I kept thinking after I posted my reply to you for a solution because back in the days of DOS/Windows this used to be a pretty common request but not over the web.

What you can do is to setup your scanner and send as the beginning of a scan a set of string chars as the "starting point" for the scan and then some other chars as the end, I was thinking in something like this:

@@XX@@YOUR REAL SCAN GOES HERE@@YY@@\r
--------------------------------------

And then you can filter the content of that field at the ENTER char and check if it is coming from your scanner or not and then assign it. Not sure if your scanner supports pre-post-pending data to your scan but if it does it definitely does worth the try.
I found a jquery script that detects input of keyboard vs scanner <https://jsfiddle.net/PhilM/Bf89R/3/> and had it modified to block keyboard entry, paste, and autofill.

in the html I disabled the autofil.

```
   <form autocomplete="off" onsubmit="return false">
  <input type="text" id="scanInput"/>
</form>

```

and then used the query to detect and block keybard and paste entry.

```
let inputStart, inputStop;

$("#scanInput")[0].onpaste = e => e.preventDefault();
// handle a key value being entered by either keyboard or scanner
var lastInput

let checkValidity = () => {
    if ($("#scanInput").val().length < 10) {
      $("#scanInput").val('')
  } else {
    $("body").append($('<div style="background:green;padding: 5px 12px;margin-bottom:10px;" id="msg">ok</div>'))
  }
  timeout = false
}

let timeout = false
$("#scanInput").keypress(function (e) {
  if (performance.now() - lastInput > 1000) {
    $("#scanInput").val('')
  }
    lastInput = performance.now();
    if (!timeout) {
    timeout = setTimeout(checkValidity, 200)
  }
});

```

demo here
<http://jsfiddle.net/uyzsb3o0/8/>