Перезапуск одного таймера из нескольких
Всем здравствуйте.
Прошу помощи у компетентных. На странице - несколько таймеров, отсчитывающих 20 секунд. Работают. Под каждым таймером кнопка, нажав по которой, он должен перезапускаться. Но, перезапускаются все. Видимо нужно как-то привязать к конкретному id. Как это реализовать я понять не могу... Скрипт таймера: function countdownTime(elem) { span_id = document.getElementById(elem); bet_time = new Date; bet_time = bet_time.getTime() + 20000; function calculate(elem) { now_time = new Date; now_time = now_time.getTime(); seconds = Math.ceil((bet_time - now_time) / 1000 * 1); if (seconds > 0) { residue = seconds < 10 ? "0" + seconds : seconds; elem.innerHTML = "00:00:" + residue; setTimeout(function() { calculate(elem); } , 1000); } else { elem.innerHTML = "Поехали"; } } calculate(span_id); } Скрипт функции перезапуска: function clickTimerButton(elem) { //$('#' + elem).html(''); //clearInterval(timer); return countdownTime(elem); } Html: <span id=''> </span> <script language='javascript'> countdownTime('span_id') </script> <button onClick='clickTimerButton('span_id');'> </button> Может есть, кто реализовывал подобное? |
Drugpunker,
:-? <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .time, input { background: rgba(102, 255, 51, 1); width: 80px; height: 30px; display: block; text-align: center; } </style> <script> function countdownTime(elem) { var bet_time = new Date; bet_time = bet_time.getTime() + 20000; window.clearTimeout(elem.timer) function calculate(elem) { var now_time = new Date; now_time = now_time.getTime(); var seconds = Math.ceil((bet_time - now_time) / 1000 * 1); if (seconds > 0) { residue = seconds < 10 ? "0" + seconds : seconds; elem.innerHTML = "00:00:" + residue; elem.timer = setTimeout(function () { calculate(elem); }, 1000); } else { elem.innerHTML = "Поехали"; } } calculate(elem); } function clickTimerButton(elem) { return countdownTime(elem); } window.onload = function () { var span = document.querySelectorAll('.time'); for (var i = 0; i < span.length; i++) { var el = span[i]; var button = document.createElement('input'); button.onclick = (function (span) { return function () { clickTimerButton(span) } })(el); button.type = 'button'; button.value = 'Жмак!' el.parentNode.insertBefore(button, el.nextSibling); button.click() } } </script> </head> <body> <span class='time'></span> <span class='time'></span> <span class='time'></span> <span class='time'></span> </body> </html> |
Вроде как то, но не то, или я не понимаю.
Вот так таймеры выглядят у меня: <span id='span_id'> </span> <script language='javascript'> countdownTime('span_id') </script> <button onClick='clickTimerButton('span_id');'> </button> <span id='span_id'> </span> <script language='javascript'> countdownTime('span_id') </script> <button onClick='clickTimerButton('span_id');'> </button> <span id='span_id'> </span> <script language='javascript'> countdownTime('span_id') </script> <button onClick='clickTimerButton('span_id');'> </button> Получается мне нужно добавить класс time ко всем спанам. Убрать onClick из кнопок. и нечего не работает...:cray: И таймеры (вначале) должны запускаться сами, без нажатия на кнопку |
Цитата:
|
Вроде как понял, но в моём то случае
<span id='span_id' class='time'> </span> <script language='javascript'> countdownTime('span_id') </script> <button>Жмак!</button> получается, вот эта строчка не нужна? Код:
el.parentNode.insertBefore(button, el.nextSibling); Так как вставлять средствами JS <button></button>не нужно, пытаюсь использовать приведённый, рони код в моей реализации. Толку ноль... В итоге всё имеет такой вид: HTML: <span id='span_id' class='time'></span> <script language='javascript'> countdownTime('span_id') </script> <button id='button'>Жмак!</button> <span id='span_id' class='time'></span> <script language='javascript'> countdownTime('span_id') </script> <button id='button'>Жмак!</button> <span id='span_id' class='time'></span> <script language='javascript'> countdownTime('span_id') </script> <button id='button'>Жмак!</button> <span id='span_id' class='time'></span> <script language='javascript'> countdownTime('span_id') </script> <button id='button'>Жмак!</button> <span id='span_id' class='time'></span> <script language='javascript'> countdownTime('span_id') </script> <button id='button'>Жмак!</button> JS: function countdownTime(elem) { var bet_time = new Date; bet_time = bet_time.getTime() + 20000; window.clearTimeout(elem.timer); function calculate(elem) { var now_time = new Date; now_time = now_time.getTime(); var seconds = Math.ceil((bet_time - now_time) / 1000 * 1); if (seconds > 0) { residue = seconds < 10 ? "0" + seconds : seconds; elem.innerHTML = "00:00:" + residue; elem.timer = setTimeout(function() { calculate(elem); } , 1000); } else { elem.innerHTML = "Поехали!"; } } calculate(elem); } /*Timer Button*/ function clickTimerButton(elem) { return countdownTime(elem); } window.onload = function() { var span = document.querySelectorAll('.time'); for (var i = 0; i < span.length; i++) { var el = span[i]; var button = document.getElementById('button'); button.onclick = (function(span) { return function() { clickTimerButton(span); }; })(el); el.parentNode.insertBefore(button, el.nextSibling); button.click(); } }; Видимо мне нужно ловить кнопку, например по id, но чего то не получается:-/ Уже как только ни пробовал решение переделать, аж стыдно, блин... |
Drugpunker,
почему у вас одинаковые id -- id уникально неповторимо http://learn.javascript.ru/ |
Это то оно таки да.
Цель поймать элемент, в частности <button>, в данной реализации, во время пересчёта <span> с классом time. Вот я и говорю как, поймать то? |
Drugpunker,
:blink: |
Цитата:
|
Может всё-таки при onClick по кнопке передавать уникальное имя каждой кнопки?
|
Часовой пояс GMT +3, время: 17:38. |