Одна функция
Есть 2 кнопки:
<span id="pro" onclick="message('1000', this);">Кнопка</span> <span id="pro1" onclick="message('1000', this);">Кнопка</span> При нажатии на кнопку, должен начаться счётчик от указанного: "1000", до 0 в текущем <span> (который был нажат). Вот JS код: var message = function(num, id) { var e = { 'totalQ' : 0, 'elemDiv' : null, start : function(num, id) { this.elemDiv = id; this.totalQ = num; window.setInterval("timerSE()", 1); }, timerSE : function() { if(this.totalQ != 0) { this.elemDiv.innerHTML = this.totalQ; this.totalQ--; } else { return; } } }; e.start(num, id); }; Но нечего не работает, делал немного иначе, он считал, но при нажатии на 2 кнопку, он переставал считать на 1ой кнопке и начинал считать на 2ой. Мне нужно, чтобы они вне зависимости друг от друга считали, по одной функции, без использования jQuery. Спасибо всем. |
<!DOCTYPE html> <html> <head> </head> <body> <span id="pro" onclick="message('1000', this);">Кнопка</span> <span id="pro1" onclick="message('1000', this);">Кнопка</span> <script> function message(num, id){ var int = setInterval(function(){ num--; if (num == 0) clearInterval(int); else id.innerHTML = num; },1000); } </script> </body> </html> |
А подскажи, можно ли реализовать через вызов отдельной функции?
function message(num, id){ var int = setInterval(function(){ num--; if (num == 0) clearInterval(int); else id.innerHTML = num; },1000); } а сделать типо на подобие моей, чтобы отдельно функция была вывода и счетчика. |
у тебя внутри setInterval(ФУНКЦИЯ, 1000);
А сделать указатель на функцию, типо: setInterval(PRO(), 1000); function PRO() { } |
Цитата:
|
Цитата:
function pro() { } |
На подобии моей функции.
Не пробовал, хз прокатит или нет: var message = function(num, id) { var e = { 'totalQ' : 0, 'elemDiv' : null, start : function(num, id) { this.elemDiv = id; this.totalQ = num; var test = this; window.setInterval("test.timerSE", 1); }, timerSE : function() { if(test.totalQ != 0) { test.elemDiv.innerHTML = test.totalQ; test.totalQ--; } else { return; } } }; e.start(num, id); }; Почему именно в отдельной функции и в том виде котором я написал, чтобы хранить и другие данные. Такие как: total, elemDiv и т.д. Я написал, простой вариант, а хочу сложный, где будет храниться другая инфа для каждой нажатой кнопки. Через переменную, не вариант. Типо: var message = { 'total' : 0, и т.д. }; т.к. на каждый клик, будет сбрасываться предыдущий таймер |
Даже если брать твой пример, то нажми 2 раза на кнопку, бред начинается. Функция выполняется 2 раза.
Как отслеживать, если функция уже нажата, то не выполнять новую функцию. |
var message = function(num, id) { var e = { 'totalQ' : 0, 'elemDiv' : null, start : function(num, id) { this.elemDiv = id; this.totalQ = num; var test = this; var pro = function(){ if(test.totalQ >= 100) { test.elemDiv.innerHTML = test.totalQ; test.totalQ--; } else { clearInterval(this); } }; window.setInterval(pro, 1); } }; e.start(num, id); }; clearInterval(this); - не работает, подскажите как исправить заодно... |
Цитата:
или навешивать обработчик через addEventListener чтобы потом его можно было удалить <!DOCTYPE html> <html> <head> </head> <body> <span id="id1">Кнопка</span> <span id="id2">Кнопка</span> <script> function message(num, id){ var int = setInterval(function(){ num--; id.innerHTML = num; if (num == 0) clearInterval(int); },1000); } document.querySelector('#id1').addEventListener('click', function(e) { message(1000, e.target); this.removeEventListener(e.type, arguments.callee); }, false); document.querySelector('#id2').addEventListener('click', function(e) { message(1000, e.target); this.removeEventListener(e.type, arguments.callee); }, false); </script> </body> </html> |
Часовой пояс GMT +3, время: 10:08. |