jQuery(function() - többször hívódik meg!

Sziasztok!

Van egy vonalkódolvasóm amivel palettákhoz vonalkódokat olvasok be és a palettákhoz rendelem hozzá. HTML-ben adott egy input mező amibe a vonalkód beillesztődik. A problémám az adott scripttel, hogy sajnos többször hívódik meg. Lényegében annyiszor hívódik meg a script ahány karakteres a vonalkód ami a keyup esemény miatt még érhető is lehetne.

A beolvasni kívánt vonalkódok hosszúsága változó lehet. tehát nem mindig azonos.

Tud valaki erre megoldást?


jQuery(function() {
$("#barcode").keyup(function() {
setTimeout(function() {

var barcode = $("#barcode").val();
var pono = $("#pono").val();
var pid = $("#pid").val();
var pidexpire = $("#pidexpire").val();

if (barcode.length >= 3) {
$("#codestatus").html(' Ellenőrzés...');
// check barcode
$.ajax({
type : 'POST',
url : 'assets/barcode/php/btr_barcode_add_homogen_palcode.php',
data : {barcode: barcode, pono: pono, pid: pid, pidexpire: pidexpire},
dataType: "json",
success : function(data) {
$("#codestatus").html(data.message);
if (data.status == 'success') {
var countDown = 4;
setInterval(function () {
if (countDown == 1) {
window.location.replace("?module=bc_betar&action=addcode&cmd=logout&cmdcode=palcode&barcode="+barcode+"&pono="+pono);
}
countDown--;
document.getElementById('time').innerHTML = countDown;
return countDown;
}, 1000);
}
else if (data.status == 'error') {
$("#barcode").val('');
}
else if (data.status == 'pidexpire') {
$("#barcode").val('');
var countDown = 4;
setInterval(function () {
if (countDown == 1) {
location.reload();
}
countDown--;
document.getElementById('time').innerHTML = countDown;
return countDown;
}, 1000);
}
}
});
return false;
}
},100);
});
});

Hozzászólások

"Lényegében annyiszor hívódik meg a script ahány karakteres a vonalkód ami a keyup esemény miatt még érhető is lehetne." Mi a kérdés, ha megvan a megoldás? :)

Vonalkódolvasó tud ENTER-t küldeni a végén (szokott)? Mert akkor arra legyen érzékeny a JS kódod.

350-750 (inkább 350) ms várakozás után küld csak el az ajax kérést a szervernek. Ha közben jön egy új karakter, akkor clearTimeout() fgv hívással kezd újra a várakozást.

+1
Vonalkód olvasó küldjön entert a végén. Ezt nem nem nehéz bekonfigolni, ha belekukkantasz a vonalkód olvasó leírásába.

Ha beszarik a vonalkód olvasód akkor kézzel fogják beírni a kolbászt...erre nem lehet időzítést tervezni.

Más szempontból ilyen adatot karakterenként vagy karakter nyalábonként küldeni a szervernek minek?
Egyben akarod tárolni, a vonalódot nem részletekben.
Szerver oldalon hogyan döntöd el, hogy megérkezett-e már a teljes string?

Keyup helyett működhet a change (attol függ, mi mindent csinál ott a vonalkodolvasod), illetve a debounce-t nézném még meg, azt ilyenekre találták ki.