我有代码,可以用来减去文本框值使用javascript?

我有代码,可以用来减去文本框值使用javascript?,javascript,html,subtraction,Javascript,Html,Subtraction,我有一些代码,可以使用javascript进行减法和附加文本框值,但问题是每当onfocus textbox时,javascript会一次又一次地执行函数,我只希望javascript执行一次函数 javascript函数一次又一次附加onMouseOver=“return B(0);” javascript函数一次又一次地执行减法onfocus=“return C();” javascript函数一次又一次附加onfocus=“return D();” 函数getObj(objID){ 返回文

我有一些代码,可以使用javascript进行减法和附加文本框值,但问题是每当
onfocus textbox
时,javascript会一次又一次地执行函数,我只希望javascript执行一次
函数

javascript函数一次又一次附加
onMouseOver=“return B(0);”

javascript函数一次又一次地执行减法
onfocus=“return C();”

javascript函数一次又一次附加
onfocus=“return D();”

函数getObj(objID){ 返回文档.getElementById(objID); } 函数B(){ var advanceBox=document.getElementById('advance'); var originalValue=advanceBox.value; advanceBox.onfocus=函数(){ this.value=parseFloat(原始值,10)+ parseFloat(document.getElementById('recamt')。值,10); 返回false; }; } 函数C(){ getObj(“余额”).value=parseFloat(getObj(“总计”).value | | 0)- (parseFloat(getObj(“advance”).value | | 0); getObj(“余额”).value=parseFloat(getObj(“余额”).value | | 0)- (浮动(getObj(“折扣”).value)| | 0); 返回false; } 函数D(){ getObj(“total”).value=parseFloat(getObj(“total”).value | | 0)+ (parseFloat(getObj(“openbal”).value | | 0)); 返回false; } 期初余额:
总计:
预付款:
余额:
Rem金额:
折扣:
您可以使用一个或多个标志:

在页面的开头:

<script>
    var flag = false;
</script>

var标志=假;
关于你的元素:

<div .... onMouseOver="if(!flag) { flag = true; return B(0);}" > .... </div>
。。。。
onFocus也一样…

您可以:

var executedAlready = false;
a内部功能B和C具有:

if(executedAlready != true){ executedAlready = true; }
else { return; }

或者您可以将事件拆离?我想有几种不同的方法可以做到这一点。

其他答案告诉您,获得结果的“最快”方法是使函数只执行一次。 您可以这样做:

  • 制作一个标志(只是一个知道函数是否已经被触发的变量)
  • 执行函数时,首先检查此标志
下面是一个如何使用函数B()执行此操作的示例:

(注意:我没有更改您的功能,现在不想进入该功能)

现在,对C和D函数重复相同的步骤(设置另外两个标志)


这不是最好的方法-设置全局对象和其他东西并不好,但是因为您可能没有任何附带的库,所以现在它将帮助您解决问题。对于长期解决方案,您应该使用一个事件库(如),并让它为您处理连接和分离onfocus事件的操作。

您可以编写示例javascript吗,因为我对您的回答感到困惑谢谢您的帮助,我还有其他问题要问您
if(executedAlready != true){ executedAlready = true; }
else { return; }
// setup fired as false
var hasBFired = false;
function B(){
  // if B is true, we do nothing
  if (hasBFired) {
    return;
  // else if it is not true, basically only the first time you call this, flip the flag and execute the rest of the code.
  } else {
    hasBFired = true;
  }
  var advanceBox = document.getElementById('advance');
  var originalValue = advanceBox.value;
  advanceBox.onfocus = function() {
  this.value = parseFloat(originalValue, 10) +
  parseFloat(document.getElementById('recamt').value, 10);
  return false;
};