我的代码可以用于减法和使用javascript的其他文本框值,它正在工作,但问题是javascript一次又一次地执行函数onfocus textbox
我只想要一次javascript应该是{{1} }?
javascript函数一次又一次executed function
javascript函数一次又一次减法onMouseOver="return B(0);"
javascript函数一次又一次onfocus="return C();"
onfocus="return D();"
答案 0 :(得分:1)
你可以:
var executedAlready = false;
内部函数B和C具有:
if(executedAlready != true){ executedAlready = true; }
else { return; }
或许您可以分离事件?我想有几种不同的方法可以做到这一点。
答案 1 :(得分:0)
您可以使用一个或多个标志:
在页面的开头:
<script>
var flag = false;
</script>
并在您的元素上:
<div .... onMouseOver="if(!flag) { flag = true; return B(0);}" > .... </div>
onFocus ...
答案 2 :(得分:0)
其他答案告诉您,获得结果的“最快”方法是让您的函数只执行一次。 你可以这样做:
以下是如何使用函数B()执行此操作的示例:
(注意:我没有改变你的功能,现在不想进入那个)
// 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;
};
现在,对C和D函数重复相同的操作(再设置两个标志)。
这不是最好的方法 - 设置全局对象和东西并不好,但由于你可能没有获得任何副库,它现在可以帮助你解决问题。对于长期解决方案,您应该使用事件库(如YUI Event)并让它处理为onfocus事件附加和分离操作。