当前位置: 首页 > 知识库问答 >
问题:

Javascript“停止键入”计时器问题

周通
2023-03-14

我正在制作一个简单的页面,您可以扫描或键入一个UPC,它会自动添加到一个表中以供显示。我放弃了一些代码来启动一个计时器,它在键入完成后等待3秒,然后在我的表中创建一个新行来显示键入的UPC和项目信息。

但是,这段代码有一些问题。(我的问题)

a.)当您手动输入UPC时,新行操作会发生多次(为同一UPC插入多行),但当您使用条形码扫描器扫描UPC时,它只完成一次操作。(这是正确的)

b)当您从字段中删除信息(使upc字段为空)时,新行操作再次发生,但插入一个空行。

c)我尝试在行插入后使upc字段为空,但没有成功。我尝试在行插入后放置upc=“;但没有成功。我定义upc如下:

 var upc=document.getElementById("UPC").value; 

(如下文和jsfiddle中所示。)

所以现在代码...

<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>
//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>&nbsp;</span><a><span class='glyphicon glyphicon-minus'></span></a>";
    upc = '';
 }
 }

共有1个答案

龙志勇
2023-03-14

正在工作:http://jsfidle.net/qabgs/1/

1)你应该在重置它之前清除旧的计时器,只是重写变量并不能清除它。keydown事件可能不能及时到达那里来清除它,所以在keyup中清除它可以解决这个问题。

$('#UPC').keyup(function(){
    clearTimeout(typingTimer);
    typingTimer = setTimeout(doneTyping, doneTypingInterval);
});

2)你在函数外做npc长度检查,这应该在函数内!

function doneTyping () {
    if (field.value.length != 0) {
field.value = '';
 类似资料:
  • 问题内容: 我已将一个WAR文件部署到Tomcat服务器,该类之一将在启动时调用,然后init()方法将安排一个计时器,每5小时触发一次以执行一些任务。 我的init()代码如下所示: 我的应用程序运行没有问题,但是当我使用 /etc/init.d/tomcat7 stop 关闭Tomcat时,我检查了日志(catalina.out),它具有以下条目: 严重:Web应用程序[/ MyApplica

  • 问题内容: 我需要一些有关在PHP中启动和停止计时器的信息。我需要测量从我的.exe程序开始(我在PHP脚本中使用函数)到完成执行并显示所花费的时间(以秒为单位)之后经过的时间。 我怎样才能做到这一点? 问题答案: 您可以使用并计算差异: 这是PHP的文档:http : //php.net/manual/zh/function.microtime.php

  • 我正在用摇摆计时器打卡NetBeans: 我只是用System.out.print来测试程序,它不是真正程序的一部分。我调用停止()方法,但计时器继续计数。此外,我通过但它的计数速度是原来的两倍。有人能帮忙吗? 编辑: 这是我的计时器(有点像SSCCE): 它不能正常工作,因为秒没有出现,但它确实显示了20次,这就是我想要的。这只是在它自己的应用程序中,在我的实际程序中更容易看到问题。 我注意到游

  • 我尝试创建一个自定义的时间流逝时间,一旦我按住音量键,它就会启动计时器,并假设时间必须在我松开键后停止,但我松开键时遇到问题,计时器仍在移动。请告诉我我错过了什么谢谢 公共布尔onKeyDown(int-keyCode,KeyEvent-event){if((keyCode==KeyEvent.keyCode_-VOLUME_-DOWN

  • 我遇到的问题是,如何发送enter以结束循环?因为系统。在里面read()取第一个数字,如果我再加上2个数字,示例可以是, 条目: 2 3(输入)读2个数字和和 1 2(输入)读2个数字和和 (enter)这里结束循环,因为enter和no数字,并给出了解决方案 出口: 5. 3. 我不知道我以前发过什么

  • 我有一个Swing计时器(javax.swing.Timer),用于在自定义Swing组件中执行一些动画。 然而,这会导致问题——特别是,即使在所有窗口都关闭后,它似乎也会阻止应用程序终止,因为实时计时器线程。此外,当看不到动画时,最好避免计时器在隐藏对象上运行的开销。 理想情况下,我希望做到以下几点: < li >当组件隐藏时停止计时器 < li >每当组件变得可见时,重新启动计时器 这是可能的