我正在创建一个函数,使用以下脚本将对象附加到文本区域:
Project Page Project Code
inputNum.onchange = inputNum.onkeydown = function(e){
if(e.type == 'change' || (e.type = 'keydown' && e.keyCode == 13)){
if(checkLength(inputNum.value,10) === true){
inputNum.value = 9999999999;
}
//random variables and functions
var j = 0;
var m = setInterval(function(){
if(j !== 0){
val = val * 40014;
}
if(val <= a){
if(useOpt === true){
res.value = res.value + "\n" + Math.round(Number((Number(val / div) * en) - sn));
}else{
res.value = res.value + "\n" + Number(Number(val / div) - Math.floor(val/div)).toFixed(5);
}
}else{
var n = val;
n = l(n,a);
val = n;
console.log(n);
if(useOpt === true){
res.value = res.value + "\n" + Math.round(Number((Number(n / div) * en) - sn));
}else{
res.value = res.value + "\n" + Number(Number(n / div) - Math.floor(n/div)).toFixed(5);
}
}
j = j + 1;
if(j == Number(rep.value)){
clearInterval(m);
}
},1);
res.value = res.value.replace(/\n/,"");
}
};
然而,当我在输入元素上按'enter'时,我似乎无法找到一种方法来运行此功能一次。按“输入”的结果值为:
0.00002
0.00002
0.74558
0.74558
而不仅仅是0.00002和0.74558。 当我按Enter键更改输入值时,是否有一种方法可以只运行一次该功能?另外,我不想为此使用jQuery。我希望代码在数字更改时同时运行,但是没有按下Enter键,当按下Enter键并且没有任何更改时,以及更改值并按下Enter键时。
答案 0 :(得分:0)
作为一个好的解决方法,我建议加油或 debounce 你的处理程序主体。有很多实现,您可以创建自己的实现,但是让lodash throttle将trailing
选项设置为false:
var myHandler = function (e) { /* ... */ }
var myThrottledHandler = _.throttle(myHandler, 45, { trailing: false });
inputNum.onchange = inputNum.onkeydown = myThrottledHandler;
这将不允许两次调用你的处理程序,直到45ms通过。