javascript - 如何确保多个setinterval函数不互相干扰

标签 javascript html function

我在一个页面上创建了两个计算器,第二个可以正确计算,但第一个不能。我相信这是由于我的两个 setinterval 函数相互干扰造成的。如何让这两个功能协同工作。

var x = document.getElementById("x");
var d = document.getElementById("d");
var xstored = x.getAttribute("data-in");
setInterval(function() {
  if (x == document.activeElement) {
    var temp = x.value;
    if (xstored != temp) {
      xstored = temp;
      x.setAttribute("data-in", temp);
      calculate();
    }
  }
}, 10);

function calculate() {
  d.innerHTML = x.value * .62;
}

var a = document.getElementById("a");
var b = document.getElementById("b");
var astored = a.getAttribute("data-in");
var c = document.getElementById("c")

setInterval(function() {
  if (a == document.activeElement) {
    var temp = a.value;
    if (astored != temp) {
      astored = temp;
      a.setAttribute("data-in", temp);
      calculate();
    }
  }
}, 50);

function calculate() {
  b.innerHTML = a.value * .62;
  c.innerHTML = Math.round(a.value * .0103);
}

function tisNumberKey(evt) {
  var charCode = (evt.which) ? evt.which : event.keyCode
  if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;

  return true;
}
<table style="width:100%;text-align: center;">
  <tbody>
    <tr>
      <td style="width:50%;background:none;">
        <p style="margin: 0px;font-weight: bold;font-size: 35px;">Lawn Square Footage</p>
      </td>
      <td style="width:50%;font-size: 35px;font-weight: bold;background:none">
        <p style="margin: 0px;font-weight: bold;font-size: 35px;">Water Usage</p>
      </td>
    </tr>
    <tr>
      <td style="width:50%;">
        <input id="x" onkeypress="return isNumberKey(event)" data-in="" type="text" style="height: 250px;margin-top: 10px;width: 250px;text-align: center;font-size: 100px" />
      </td>
      <td style="width:50%;font-size: 100px;"><span id="d" class="counter"></span>
      </td>
    </tr>
  </tbody>
</table>
<table style="width:100%;text-align: center;">
  <tbody>
    <tr>
      <td style="width:33%;background:none;">
        <p style="margin: 0px;font-weight: bold;font-size: 35px;">Lawn Square Footage</p>
      </td>
      <td style="width:33%;font-size: 35px;font-weight: bold;background:none">
        <p style="margin: 0px;font-weight: bold;font-size: 35px;">Water Usage</p>
      </td>

    </tr>
    <tr>
      <td style="width:33%;">
        <input id="a" onkeypress="return tisNumberKey(event)" data-in="" type="text" style="height: 250px;margin-top: 10px;width: 250px;text-align: center;font-size: 100px" />
      </td>
      <td style="width:33%;font-size: 100px;"><span id="b" class="counter"></span>
      </td>
      <td style="width:33%;">
        <p style="font-size:50px; font-weight:bold;">Your lawn takes a &nbsp;<span id="c"></span>&nbsp; hour shower
      </td>
    </tr>
  </tbody>
</table>

http://codepen.io/anon/pen/qdyPjE

最佳答案

不能有 2 个具有相同名称/签名的函数。您有两次 calculate(),您应该命名一个不同的名称,例如 calculate1()。您正在用第二个函数覆盖第一个 calculate() 函数,这就是为什么第二个函数有效但第一个函数不起作用...

关于javascript - 如何确保多个setinterval函数不互相干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31483039/

相关文章:

html - 如何在浏览器缓存中存储大量数据

javascript - 如何在 Google App Script 函数中使用多个参数并检查跨 HTMLService 选中的单选框?

javascript - 当脚本选择单选按钮时,paper-radio-group-changed 不触发

html - 我的联系人表单在移动设备上显示时出现溢出问题

javascript - 如何在刷新时保持页面状态?

javascript - 如何在 HTML 文件中调用 TypeScript 函数?

function - Haskell 函数调用中的括号

node.js - 是否有更好的依赖函数调用方法而不是堆叠它们?

javascript - Angular : some help understanding service/factory

javascript - 如何在不删除所有文本节点的情况下删除 div 中的单个文本节点?