Javascript 单击一次后停止事件处理程序的运行

Javascript 单击一次后停止事件处理程序的运行,javascript,dom,event-handling,dom-events,Javascript,Dom,Event Handling,Dom Events,我正在编写一些JavaScript代码来执行对超链接的跟踪。基本上,如果你点击一个链接,它将触发对另一个系统的跟踪 但是,我只希望在第一次单击时触发跟踪。 目前,我的事件处理程序在每次单击时启动,我只希望它启动一次 对于下面的代码,我正在使用while循环。这适用于第一个链接,但这意味着当我单击其他链接时,我的事件处理程序不会启动。。。所以它完全停止运行 不确定处理此问题的最佳方法 我使用event.target从链接上的aria控件值中获取一个数字。下面我来解释一下我在做什么: var

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

但是,我只希望在第一次单击时触发跟踪。
目前,我的事件处理程序在每次单击时启动,我只希望它启动一次

对于下面的代码,我正在使用
while循环
。这适用于第一个链接,但这意味着当我单击其他链接时,我的事件处理程序不会启动。。。所以它完全停止运行

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

我使用
event.target
从链接上的aria控件值中获取一个数字。下面我来解释一下我在做什么:

   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);
var apples=object.apples;
var-click=0;
函数sendTrackingData(事件){
if(event.domEvent.target.hasAttribute(“aria控件”)){
//抓住aria控件attibute的值
var buttonAriaControlValue=event.domEvent.target.attributes[“aria控件”].value;
//仅在第一次单击时发送报告
while(buttonAriaControlValue&&单击<2){
点击++;
//取值的最后一个数字
变量编号=ButtonAriacTrolValue.charAt(ButtonAriacTrolValue.length-1);
var integer=parseInt(数字);
var final=整数+1
reportingService.sendReport({},'ClickReport',值为:'+final+'of'+apples);
}
}
}
onDomeEvent('click',sendTrackingData');

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

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

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);

嘿@Farvillain-谢谢你!想知道你为什么用Date.now?还有,['stopTrack']-我猜你是指aria控件属性,对吗?stopTrack只是我选择的一个名称,用来知道链接是否必须被跟踪。使用您想要的,但确保它是一个专用属性,不会被分配到代码中其他地方。Date.now只是我做的事而不是真/假。。。如果需要,请将其替换为“true”