Điều với máy quét mã vạch là chúng thường xuất hiện giống như bàn phím HID tiêu chuẩn. Do đó, mỗi mã mới được quét có hiệu quả là 'đã gõ' sau phiên bản trước đó. Một giải pháp tôi đã sử dụng trong quá khứ là để xem có bao nhiêu thời gian trôi qua giữa các lần nhấn phím trong hộp văn bản đó. Nếu nó dài hơn 10 mili giây (hoặc xung quanh giá trị đó, tôi tin rằng đây là khoảng thời gian lớn nhất cho máy quét mà tôi đang sử dụng để 'nhập' toàn bộ mã), thì đó là mã vạch mới và bạn nên xóa mọi thứ trước nó .
tôi đã không có một IDE để tay, vì vậy hầu hết các lớp/tên phương pháp có lẽ là con đường tắt, nhưng cái gì đó như một ví dụ:
DateTime lastKeyPress = DateTime.Now;
void txtBarcode_KeyPress(object sender, KeyPressEventArgs args)
{
if(((TimeSpan) (DateTime.Now - lastKeyPress)).TotalMilliseconds > 10)
{
txtBarcode.Text = "";
}
lastKeyPress = DateTime.Now;
}
Tôi nghĩ rằng nên làm điều đó. Nó hoạt động vì sự kiện KeyPress xảy ra trước khi ký tự được nối thêm, vì vậy bạn có thể xóa hộp văn bản trước tiên.
Chỉnh sửa: Để thiết lập, tôi đoán rằng bất cứ nơi nào bạn có txtBarcode.TextChanged += txtBarcode_TextChanged
, thay vào đó bạn có một txtBarcode.KeyPress += txtBarcode_KeyPress
. Kiểm tra tên sự kiện là đúng mặc dù.
Chỉnh sửa 2:
jQuery Version:
Giả HTML này (kể từ khi bạn đang sử dụng ASP, nguồn của bạn cho thẻ đầu vào sẽ trông khác, nhưng sản lượng sẽ vẫn có id
thuộc tính, mà thực sự là thuộc tính duy nhất quan trọng):
<form action="" method="post">
<input type="text" name="txtBarcode" id="txtBarcode" />
</form>
Sau đó javascript này hoạt động:
$(document).ready(function() {
var timestamp = new Date().getTime();
$("#txtBarcode").keypress(function(event)
{
var currentTimestamp = new Date().getTime();
if(currentTimestamp - timestamp > 50)
{
$(this).val("");
}
timestamp = currentTimestamp;
});
});
Dường như (ít nhất là trong trình duyệt web) 50 mili giây là thời gian cần thiết để cho phép giữa các ký tự. Tôi đã thử nghiệm điều này trong Firefox, Chrome và IE7.
Đây là câu hỏi hoàn toàn hợp lệ, có lẽ tiếng Anh không hoàn hảo, nhưng điều anh ấy muốn là rõ ràng. – Kazar