• Страница 1 из 1
  • 1
Модератор форума: JonMagon  
Сообщество uCoz » Вебмастеру » JavaScript, Flash и прочие технологии » JavaScript » Подключение js
Подключение js
Chesterfield5017
Сообщений: 238
Репутация: 10

Сообщение # 1 | 02:20:48
Решил подключить такой скрипт

Код
document.querySelector('button').onclick = function(){
  var button = this;
  var buttonText = this.innerText;
  
  button.setAttribute("disabled", true);
  window.open(button.dataset.link, '_blank');
  
  var secondsUntilNextClick = 10;
  var interval = setInterval(function(){
    secondsUntilNextClick--;
    button.innerText = secondsUntilNextClick;
   
    if (secondsUntilNextClick === 0){
      clearInterval(interval);
      button.innerText = buttonText;
      button.removeAttribute("disabled");
    }
    
  }, 1000)
}


к такому виду материалов

Код
<div class="eTitle" style="text-align:left;"><a target="_blank" href="$SITE_URL$">$TITLE$</a> <button id="yourButton" data-link="$SITE_URL$">ПЕРЕЙТИ</button></div>

<style>
button{
  padding: 4px 10px;
  background-color: green;
  color: white
}

button:disabled{
  background-color: red;
}   
</style>

<script src="http://freebit.clan.su/js/time60.js"></script>


Работа скрипта заключается в том чтобы была кнопка на добавленный сайт после нажатия на которую этот сайт открывался в новой вкладке, после чего кнопка стает не активной в течение 10 секунд. Всё работает но только для последнего добавленного сайта. На все остальные сайты почему то не переходит? Подскажите что нужно исправить? За ранее благодарю!

Подключение должно происходить именно в виде материалов так как для каждого сайта нужны разные скрипт, а точнее время неактивной кнопки!
Прикрепления: 6804522.png(6.1 Kb)

Сообщение отредактировал Chesterfield5017 - Понедельник, 30 Апр 2018, 02:32:45
LuСiFеr
Сообщений: 212
Репутация: 289
Уровень замечаний:

Сообщение # 2 | 03:16:56
Chesterfield5017, если я вас правильно понял, вам нужно данный скрипт "привязывать" к каждому материалу, то есть привязать id материала к скрипту этого материала, сейчас, при добавлении этого скрипта в шаблон вид материалов, он дублируется с каждым выводимым материалом, количество выставляется в настройках модуля, поэтому он срабатывает только с одним материалом, нужно привязать скрипт, с помощью $ID$ (так как эта переменная уникальная, и дважды не повторяется) к каждому конкретному выводимому материалу

Сообщение отредактировал LuСiFеr - Понедельник, 30 Апр 2018, 03:19:32
Chesterfield5017
Сообщений: 238
Репутация: 10

Сообщение # 3 | 10:36:03
Мне нужно привязать не к $ID$ а к $SITE_URL$ у каждого материала он разный
LuСiFеr
Сообщений: 212
Репутация: 289
Уровень замечаний:

Сообщение # 4 | 11:54:10
Chesterfield5017, у каждого материала есть свой id и он уникален

Chesterfield5017
Сообщений: 238
Репутация: 10

Сообщение # 5 | 12:53:15
Сделал кнопку так
Код
<button id="yourButton" data-link="$ID$">ПЕРЕЙТИ</button>
всёравно первое нажатие срабатывает а со вторым нет

hikornienko
Сообщений: 123
Репутация: 11

Сообщение # 6 | 14:19:07
Ошибка в идентификации нажатой кнопки, вернее, он для всех кнопок одинаковый. Я бы посоветовал.
Поставить каждой кнопке id c использованием $ID$, а потом поиск не по селектору а по id document.getElementById($ID$).onclick = function()

Но в таком варианте как вы хотите, много дублирующего javascript кода. Я бы делал такую штуку, отслеживая нажатую кнопку на странице через target
Chesterfield5017
Сообщений: 238
Репутация: 10

Сообщение # 7 | 14:39:19
Подскажите свой вариант если не сложно. Буду очень благодарен!

Добавлено (30 Апр 2018, 14:39:19)
---------------------------------------------
Поставил кнопку так

Код
<button id="yourButton" data-link="$ID$">ПЕРЕЙТИ</button>
а скрипт поменял на такой

Код
document.getElementById($ID$).onclick = function(){
  var button = this;
  var buttonText = this.innerText;
  
  button.setAttribute("disabled", true);
  window.open(button.dataset.link, '_blank');
  
  var secondsUntilNextClick = 10;
  var interval = setInterval(function(){
    secondsUntilNextClick--;
    button.innerText = secondsUntilNextClick;
   
    if (secondsUntilNextClick === 0){
      clearInterval(interval);
      button.innerText = buttonText;
      button.removeAttribute("disabled");
    }
    
  }, 1000)
}

вообще нечего не срабатывает. Пере проверил срабатывать то срабатывает но проблема остается таже

Сообщение отредактировал Chesterfield5017 - Понедельник, 30 Апр 2018, 16:53:53
hikornienko
Сообщений: 123
Репутация: 11

Сообщение # 8 | 18:55:44
Хах.. нельзя на тарабам подставлять)
Chesterfield5017
Сообщений: 238
Репутация: 10

Сообщение # 9 | 13:14:03
Ну так я не пойму как поставить каждой кнопке id с использованием $ID$ если у кнопки уже есть id="yourButton" или просто замисть текусчего значения поставить $ID$?

Добавлено (02 Май 2018, 13:14:03)
---------------------------------------------
Подсказали другой скрипт который работает без привязки по id


Код
Array.from(document.querySelectorAll('button')).map(function(btn){  btn.onclick = function(){    var btnText = this.innerText;
    btn.setAttribute("disabled", true);    window.open(btn.dataset.link, '_blank');
    var secondsUntilNextClick = 10;    var interval = setInterval(function(){      secondsUntilNextClick--;      btn.innerText = secondsUntilNextClick;
      if (secondsUntilNextClick === 0){        clearInterval(interval);        btn.innerText = btnText;        btn.removeAttribute("disabled");      }
    }, 1000)  }})
Но теперь проблема состоит в том как сделать что бы после обновления страницы счётчики не сбивались?
hikornienko
Сообщений: 123
Репутация: 11

Сообщение # 10 | 19:30:17
Куки добавить ссылка на урок
Chesterfield5017
Сообщений: 238
Репутация: 10

Сообщение # 11 | 00:54:04
Есть вот такой скрипт

Код
Array.from(document.querySelectorAll('button')).map(function(btn){  btn.onclick = function(){    var btnText = this.innerText;
    btn.setAttribute("disabled", true);    window.open(btn.dataset.link, '_blank');
    var secondsUntilNextClick = 10;    var interval = setInterval(function(){      secondsUntilNextClick--;      btn.innerText = secondsUntilNextClick;
      if (secondsUntilNextClick === 0){        clearInterval(interval);        btn.innerText = btnText;        btn.removeAttribute("disabled");      }
    }, 1000)  }})
к которому нужно прикрутит cookies может кто поможет. Буду благодарен!

leonoff(on)
Сообщений: 284
Репутация: 56

Сообщение # 12 | 09:41:51
Цитата Chesterfield5017 ()
Решил подключить такой скрипт
Все делается гораздо проще. В виде материала оставляете только кнопку с каким-нибудь классом, к примеру
Код
<button class="site-url-button" data-link="$SITE_URL$">ПЕРЕЙТИ</button>
В шаблоне Нижняя часть сайта ваш код, чуть модифицированный под jquery:


Код
$('.site-url-button').on('click', function() {
    var btn = $(this),
        buttonText = btn.text();
    $(this).prop('disabled', true); // или attr вместо prop (в зависимости от версии jquery)
    window.open(btn.attr('data-link') , '_blank');
    var secondsUntilNextClick = 10,
    interval = setInterval(function(){
        secondsUntilNextClick--;
        btn.text(secondsUntilNextClick);
        if (secondsUntilNextClick === 0){
            clearInterval(interval);
            btn.text(buttonText);
            btn.removeAttr('disabled');
        }
    }, 1000);
})

Один и тот же скрипт не будет повторяться 10 раз. Куки вам вообще не нужны. Зачем они вам? Чтоб показать пользователю сколько раз он кликнул по кнопке? Так он и так знает).

Почему реперы зимой и летом ходят в шапках, но при этом все равно болеют?
Сообщество uCoz » Вебмастеру » JavaScript, Flash и прочие технологии » JavaScript » Подключение js
  • Страница 1 из 1
  • 1
Поиск: