Остановить запуск обработчика событий после одного клика - PullRequest
0 голосов
/ 18 октября 2019

Я пишу код JavaScript для выполнения отслеживания гиперссылок. По сути, если вы нажмете на ссылку, она отключит отслеживание в другой системе.

Однако я хочу, чтобы отслеживание запускалось только при первом нажатии.
В данный момент мой обработчик событий запускается при каждомнажмите, и я хочу, чтобы он срабатывал только один раз.

С кодом ниже я использую while loop. Это работает для первой ссылки, но это означает, что мой обработчик событий не срабатывает, когда я нажимаю на другие ссылки ... Так что он полностью прекращает свою работу.

Не уверен в наилучшем подходе к этому.

Я извлекаю число из значения aria-controls по ссылке, используя event.target. Просто чтобы объяснить, что я делаю ниже:

   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 голосов
/ 18 октября 2019

Если вы хотите, чтобы каждая ссылка была кликабельной один раз, вы не можете использовать глобальную переменную (щелчок).

Это простой метод, вам просто нужно изменить две прокомментированные строки

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...