3 回答

TA貢獻1111條經驗 獲得超0個贊
好像你在聽按鍵。使用計時器取消它。去抖動方法的基本思想。
var timer;
function autofill(value){
if (timer) window.clearTimeout(timer);
if(value.length === 9){
timer = window.setTimeout( function () {
processIt(value);
}, 50);
} else if(value.length === 12){
processIt(value);
}
}
function processIt(value){
console.log('here', value);
}
但這是一個糟糕的解決方案。通常,您將掃描儀設置為觸發標簽或輸入 press,這樣您就知道它已完成。我會檢查是否發生這種情況,然后改為傾聽。然后你可以只聽那個,你就知道掃描儀已經完成了。
var inp = document.getElementById("barcode");
inp.addEventListener("keydown", function (evt) {
if (["Tab", "Enter"].includes(evt.key)) {
evt.preventDefault();
console.log('scanner is done', evt.target.value);
}
});
<input type="text" id="barcode" />

TA貢獻1810條經驗 獲得超5個贊
對于最常見的場景,掃描儀會一個一個觸發這樣的事件:焦點,輸入字符....輸入最后的'Enter'字符,所以你必須關注最后一個事件。
<script type="text/javascript">
window.addEventListener("load", function () {
var ic = document.getElementById("IC-input");
ic.addEventListener("focus", function (args) {
ic.value = "";
});
ic.addEventListener("keyup", function (args) {
if (args.key == "Enter") {
autofill(ic.value);
}
});
});
function autofill(value) {
console.log("Autofill:" + value)
//console.log(9 digits);
button = document.getElementById("theButton");
if (value.length == 9) {
console.log('form is ready to submit');
theButtonIsPressed(value);
}
}
</script>
<span>
<input type="text" id="IC-input" name="IC" onkeyup="input_keyup" placeholder="Enter your IC Number" required maxlength="12">
<label><button type="button" id="theButton" onclick="theButtonIsPressed()">Submit</button></label>
</span>

TA貢獻1828條經驗 獲得超6個贊
問題是一旦輸入框有 9 個字符,自動填充功能就會運行以按下按鈕。這是因為您正在通過附加到輸入標簽的“onkeyup”事件偵聽器運行自動填充功能。
解決方案是在確保有預期的全長值后運行自動填充功能。祝你好運。
添加回答
舉報