Ok, è più chiaro.
Prova in questo modo, qui un esempio:
codice HTML:
<!DOCTYPE HTML>
<html lang="it">
<head>
<title>Esempio</title>
<style>
.panel{
background: #c7ccd4;
padding: 10px;
margin-bottom: 20px;
}
</style>
</head>
<body>
<div class="panel">
<input type='text' id='barcode' class="onblur-refocus-barcode" name='barcode' placeholder='BarCode' autofocus>
<input type='text' id='ricerca' class="onblur-refocus-barcode" name='ricerca' placeholder='Cerca prodotto'>
<hr>
<input type="button" value="bottone">
<input type="button" value="Altro bottone">
<input type="button" value="bottone">
<input type="radio" name="grupporadio">
<input type="radio" name="grupporadio">
<input placeholder="input text normale" title="Il focus torana subito a barcode appena attivi questo campo">
<input class="onblur-refocus-barcode" placeholder="onblur-refocus-barcode" title="Il focus torana a barcode quando esci da questo campo">
</div>
<script>
window.addEventListener('focus', refocusBarcode); // Riprendo il focus quando questa finestra del browser ritorna attiva
document.addEventListener('focusin', refocusBarcode); // Per IE
[].forEach.call(document.querySelectorAll('.onblur-refocus-barcode'), function(e){
e.addEventListener('blur', refocusBarcode);
});
function refocusBarcode(e){
setTimeout(function(){
if(!document.activeElement.classList.contains('onblur-refocus-barcode')) document.getElementById('barcode').focus();
});
};
</script>
</body>
</html>
Inserisci lo script così com'è, quindi applica la classe onblur-refocus-barcode a tutti i campi di testo in cui prevedi di poter scrivere prima che il focus torni al campo barcode. Applica tale classe anche allo stesso campo barcode.
In sostanza, la funzione refocusBarcode viene applicata al blur di tutti gli elementi con tale classe. Il setTimeout applica un ritardo (sebbene sia istantaneo) che serve per permettere di stabilire l'elemento attivo (activeElement), cioè quello che prende il focus dopo il blur appena avvenuto. A quel punto, se l'elemento attivo (qualsiasi esso sia) non ha classe onblur-refocus-barcode, il focus torna al campo barcode.
Ho preferito l'uso di una classe specifica, piuttosto che applicare la funzione ai singoli elementi e di seguito verificarli uno per uno, in modo da poter decidere quali elementi devono mantenere il focus (come i campi di testo) prima che questo torni, appena avviene il loro blur, al campo barcode.
Inoltre le prime due righe servono per riapplicare il focus se la finestra stessa risulta inattiva e viene poi riattivata. Cioè se si clicca qualsiasi altra cosa del sistema operativo, che non sia qualcosa all'interno della finestra stessa, chiaramente la finestra perde il focus, e così anche qualsiasi elemento all'interno di essa che lo avesse.
Fai qualche prova e vedi se puo andare bene.
Fai sapere.