在纯JS中检测用户是否两次单击表单元素

时间:2018-11-01 19:16:49

标签: javascript

如果用户第二次单击“ myFormWrapper”(我的表单)中的任何元素,我将尝试检测并触发一个函数。

var timesClicked = 0;

document.querySelectorAll('myFormWrapper').addEventListener('click', false);
timesClicked++;

    if (timesClicked>1) {

        function() {
            setInterval( jumpRate, 500);
        });
            function jumpRate(){
            var top = document.getElementById("rate").offsetTop;
            window.scrollTo(0, top);
        }
    } 
});

1 个答案:

答案 0 :(得分:1)

您正在使用querySelectorAll。该函数返回一个NodeList。要将侦听器添加到列表中的所有元素,您必须对其进行迭代。 forEach

提供的参数不是正确的选择器。假设您使用的是myFormWrapper类,则将其更改。

您没有正确提供回调函数。您正在传递false而不是函数。

您还将超时包装在函数中。您没有打电话。

此外,您只想触发一次滚动。在这种情况下,您应该使用setTimeout而不是setIntervalsetTimeout仅在给定毫秒后调用一次回调,setTimeout将重复调用该回调。

函数jumpRate不必是命名函数,您可以匿名传递。

尝试一下:

var timesClicked = 0;

document.querySelector('.myFormWrapper').forEach(function (element) {
    element.addEventListener('click', function () {
        timesClicked++;

        if (timesClicked > 1) {    
                setTimeout(function () {
                    var top = document.getElementById("rate").offsetTop;
                    window.scrollTo(0, top);
                }, 500);
            } 
        });
    };
});