Добавить GET переменную по клику в URL

367
08 июля 2017, 11:37

Есть код, он добавляет отпечаток в форму регистрации:

window.addEventListener('load', function() { 
  new Fingerprint2().get(function(result, components){
      var input = document.createElement('input');
      input.type = 'hidden';
      input.name = 'fgpr';
      input.value = result;
      document.forms['regform'].appendChild(input);
  });
}, false);

Есть также группа ссылок

<div id="social_gr">
    <a href="{$fsbk_lnk}" class="btn_fb">войти</a>
    <a href="{$vkon_lnk}" class="btn_vk">войти</a>
</div>

Необходимо при клике на ссылку в этой группе динамически "приклеивать" отпечаток (Т.е. значение, которое присваивается input-у: input.value = result) в виде GET параметра в конец текущей ссылки. Как это сделать?

Answer 1

Чтобы решить вашу большую сложную задачу, нужно решить несколько маленьких простых задач:

  1. Назначить обработчик события click на ссылках в группе #social_gr

    var links = document.getElementById('social_gr').getElementsByTagName('a');
    for (var i = 0, len = links.length; i < len; i++) {
      links[i].addEventListener('click', onclick, false);
    }
  2. Добавить параметр к ссылке

    // link - это элемент `a`
    if (link.href.indexOf('?') === -1) {
      // если в ссылке не содержатся другие параметры
      link.href += '?fgpr=' + getFingerprint();
    } else {
      // если в ссылке уже содержатся другие параметры
      link.href += '&fgpr=' + getFingerprint();  
    }

    Или укороченная запись с использованием тернарного оператора

    link.href += (link.href.indexOf('?') === -1 ? '?' : '&') + 'fgpr=' + getFingerprint();
  3. Получить значение отпечатка из input

    var fingerprint = document.getElementsByName('fgpr')[0].value;

Полный рабочий код примера на CodePen

Answer 2

Можно добавить с помощью history без перезагрузки страницы

history.pushState({}, document.title, window.location.href + '?test=1')

READ ALSO
PhantomJs Не работает слип внутри evaluate

PhantomJs Не работает слип внутри evaluate

Всем приветНужно сделать sleep на 2 секунды в PhantomJs, после вернуть результат, пробовал через setTimeOut, но не возвращает результат

300
Кириллица в регулярном выражении JS

Кириллица в регулярном выражении JS

Данный код переводит в верхний регистр первых букв слова, но почему то не работает с кириллицей

205
Добавление данных в конец таблицы Google Sheets

Добавление данных в конец таблицы Google Sheets

Возникла необходимость по работе использовать google sheetsВ javascript совсем без малейшего понятия

440