对于这个问题,我已经创建了一个功能齐全的JSfiddle:http://jsfiddle.net/KSCLC/
我正在创建一个简单的页面,您可以在其中扫描或键入UPC,它会自动添加到表中以供显示。我取消了一些代码来启动一个计时器,在打字完成后等待3秒,然后在我的表中创建一个新行,以显示输入的UPC和项目信息。
这段代码有一些问题。 (我的问题)
A。)当您手动输入UPC时,新的行动作会多次发生(为同一个upc插入多行)但是当您使用条形码扫描仪扫描UPC时,它只会完成一次动作。 (这是正确的)
B。)当您从字段中删除信息(将upc字段留空)时,新的行操作会再次发生,但会插入一个空行。
C。)我尝试在插入行之后使upc字段为空,但这不会发生。我尝试在插入行之后放置upc='';
,但这不起作用。我将upc
定义为:
var upc=document.getElementById("UPC").value;
(正如你在下面和jsFiddle中看到的那样。)
现在代码......
我刚用upc字段的简单输入:
<input type="text" id="UPC" name="UPC" class="form-control scanning" autofocus="autofocus" placeholder="Scan or enter UPC here" />
和扫描项目的简单表格
<div class="scannedItems">
<table class="table table-hover" id="ScannedItems">
<thead>
<tr>
<th>UPC</th>
<th>Description</th>
<th>Price</th>
<th>Qty</th>
<th>Total</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td>8754621160</td>
<td>Example Product</td>
<td>$5.00</td>
<td>5lbs</td>
<td>$25.00</td>
<td>
<a><span class="glyphicon glyphicon-plus" style="padding-right:15px"></span></a>
<a><span class="glyphicon glyphicon-minus"></span></a>
</td>
</tr>
</tbody>
</table>
</div>
然后是我的Javascript
//setup before functions
var field = document.getElementById("UPC");
var typingTimer; //timer identifier
var doneTypingInterval = 3000; //time in ms, 3 seconds
//on keyup, start the countdown
$('#UPC').keyup(function () {
typingTimer = setTimeout(doneTyping, doneTypingInterval);
});
//on keydown, clear the countdown
$('#UPC').keydown(function () {
clearTimeout(typingTimer);
});
//user is "finished typing," do something
if (field.value.length == 0) {
//do nothing
} else {
function doneTyping() {
var upc = document.getElementById("UPC").value;
var table = document.getElementById("ScannedItems");
var row = table.insertRow(-1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
var cell4 = row.insertCell(3);
var cell5 = row.insertCell(4);
var cell6 = row.insertCell(5);
cell1.innerHTML = upc;
cell2.innerHTML = "Example Description";
cell3.innerHTML = "$3.00";
cell4.innerHTML = "7lbs";
cell5.innerHTML = "$21.00";
cell6.innerHTML = "<a><span class='glyphicon glyphicon-plus' style='padding-right:15px;'></span></a><span> </span><a><span class='glyphicon glyphicon-minus'></span></a>";
upc = '';
}
}
答案 0 :(得分:2)
工作:http://jsfiddle.net/QAbGS/1/
1)在重置之前应始终清除旧计时器,只是覆盖变量不会清除它。 keydown事件可能无法及时清除它,因此在keyup中清除它会解决这个问题。
$('#UPC').keyup(function(){
clearTimeout(typingTimer);
typingTimer = setTimeout(doneTyping, doneTypingInterval);
});
2)你在函数外部进行了npc长度检查,这应该在它里面!
function doneTyping () {
if (field.value.length != 0) {
3)您正在将文本框的值保存到名为npc的变量中。然后你将此变量设置为空,而不是文本框!你应该用textbox.value =''来重置它。
field.value = '';