停止运行事件处理程序,一按后

问题描述 投票:0回答:1
我正在编写一些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);

javascript dom event-handling dom-events
1个回答
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);

© www.soinside.com 2019 - 2024. All rights reserved.