一键单击即可停止运行事件处理程序

时间:2019-10-18 15:28:31

标签: javascript dom event-handling dom-events

我正在编写一些JavaScript代码以对超链接执行跟踪。基本上,如果您单击链接,它将触发对另一个系统的跟踪。

但是,我只希望在第一次点击时触发跟踪。
此刻,我的事件处理程序会在每次点击时触发,而我只希望它触发一次。

使用下面的代码,我正在使用while loop。这对第一个链接有效,但是这意味着当我单击其他链接时,我的事件处理程序不会启动...因此它完全停止运行。

不确定处理此问题的最佳方法。

我正在使用event.target从链接上的aria-controls值中获取一个数字。只是在下面解释我在做什么:

   var apples         = object.apples; 
   var click          = 0;

    function sendTrackingData(event) {
        if (event.domEvent.target.hasAttribute("aria-controls")) {

            // Grab the value of aria-controls attibute
            var buttonAriaControlValue = event.domEvent.target.attributes["aria-controls"].value;


            //Only send report on the first click click
            while (buttonAriaControlValue && click < 2) {
                click++;

                //Take the last number of the value
                var number = buttonAriaControlValue.charAt(buttonAriaControlValue.length-1);

                var integer = parseInt(number);
                var final = integer + 1

                reportingService.sendReport({}, 'ClickReport', 'The value is: ' + final + ' of ' + apples);
        }
    }
}

fruitLinks.onDOMEvent('click', sendTrackingData);

1 个答案:

答案 0 :(得分:0)

如果您希望每个链接都可以单击一次,则不能使用全局变量(单击)。

这是一种简单的方法,您只需要更改两条注释行

function sendTrackingData(event) {
    let target = event.domEvent.target;

    if ( target.attributes['stopTrack'] ) return;
    target.attributes['stopTrack'] = Date.now();

    //let trackValue = 343; // Take it from some target.attritues
    //let type = 'apple'; // Take it from some target.attritues
    reportingService.sendReport({}, 'ClickReport', 'The value is: ' + trackValue + ' of ' + type);
}

fruitLinks.onDOMEvent('click', sendTrackingData);