在多个不同事件上触发单个函数

时间:2017-12-13 21:24:49

标签: javascript function events

我正在创建一个函数,使用以下脚本将对象附加到文本区域:
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键时。

1 个答案:

答案 0 :(得分:0)

作为一个好的解决方法,我建议加油 debounce 你的处理程序主体。有很多实现,您可以创建自己的实现,但是让lodash throttletrailing选项设置为false:

var myHandler = function (e) { /* ... */ }
var myThrottledHandler = _.throttle(myHandler, 45, { trailing: false });
inputNum.onchange = inputNum.onkeydown = myThrottledHandler;

这将不允许两次调用你的处理程序,直到45ms通过。