Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2017, 15:55
Аватар для Narko
Новичок на форуме
Отправить личное сообщение для Narko Посмотреть профиль Найти все сообщения от Narko
 
Регистрация: 23.08.2017
Сообщений: 8

Одна функция
Есть 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.

Спасибо всем.
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2017, 16:08
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!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>
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2017, 16:13
Аватар для Narko
Новичок на форуме
Отправить личное сообщение для Narko Посмотреть профиль Найти все сообщения от Narko
 
Регистрация: 23.08.2017
Сообщений: 8

А подскажи, можно ли реализовать через вызов отдельной функции?
function message(num, id){
    var int = setInterval(function(){
        num--;
        if (num == 0) clearInterval(int);
        else id.innerHTML = num;
    },1000);
}


а сделать типо на подобие моей, чтобы отдельно функция была вывода и счетчика.
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2017, 16:15
Аватар для Narko
Новичок на форуме
Отправить личное сообщение для Narko Посмотреть профиль Найти все сообщения от Narko
 
Регистрация: 23.08.2017
Сообщений: 8

у тебя внутри setInterval(ФУНКЦИЯ, 1000);
А сделать указатель на функцию, типо:
setInterval(PRO(), 1000);
function PRO()
{

}
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2017, 16:38
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Narko Посмотреть сообщение
у тебя внутри setInterval(ФУНКЦИЯ, 1000);
А сделать указатель на функцию, типо:
setInterval(PRO(), 1000);
function PRO()
{

}
да по сути можно любую вложенность сделать, но вот только зачем? на написал самый простой вариант.
Ответить с цитированием
  #6 (permalink)  
Старый 23.08.2017, 16:40
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Narko Посмотреть сообщение
у тебя внутри setInterval(ФУНКЦИЯ, 1000);
А сделать указатель на функцию, типо:
setInterval(PRO(), 1000);
function PRO()
{

}
setInterval(pro, 1000);
function pro()
{

}
Ответить с цитированием
  #7 (permalink)  
Старый 23.08.2017, 16:46
Аватар для Narko
Новичок на форуме
Отправить личное сообщение для Narko Посмотреть профиль Найти все сообщения от Narko
 
Регистрация: 23.08.2017
Сообщений: 8

На подобии моей функции.
Не пробовал, хз прокатит или нет:
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,
и т.д.
};

т.к. на каждый клик, будет сбрасываться предыдущий таймер
Ответить с цитированием
  #8 (permalink)  
Старый 23.08.2017, 18:03
Аватар для Narko
Новичок на форуме
Отправить личное сообщение для Narko Посмотреть профиль Найти все сообщения от Narko
 
Регистрация: 23.08.2017
Сообщений: 8

Даже если брать твой пример, то нажми 2 раза на кнопку, бред начинается. Функция выполняется 2 раза.
Как отслеживать, если функция уже нажата, то не выполнять новую функцию.
Ответить с цитированием
  #9 (permalink)  
Старый 23.08.2017, 18:20
Аватар для Narko
Новичок на форуме
Отправить личное сообщение для Narko Посмотреть профиль Найти все сообщения от Narko
 
Регистрация: 23.08.2017
Сообщений: 8

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); - не работает, подскажите как исправить заодно...
Ответить с цитированием
  #10 (permalink)  
Старый 23.08.2017, 20:40
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Narko Посмотреть сообщение
Даже если брать твой пример, то нажми 2 раза на кнопку, бред начинается. Функция выполняется 2 раза.
Как отслеживать, если функция уже нажата, то не выполнять новую функцию.
путей решения есть несколько. можно сделать нормальную кнопу и дизейблить ее.
или навешивать обработчик через 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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одна функция в разных scope brainraider Angular.js 4 27.06.2016 06:51
Одна функция к 2-ум разным объектам Nikitos* Общие вопросы Javascript 5 24.01.2016 22:13
Одна функция для всех тегов по одному событию antsivash Общие вопросы Javascript 1 22.10.2012 00:18
Несколько событий(onmouseover), одна функция. Передача объекта события. IDCh Javascript под браузер 4 29.08.2012 16:35
JavaScript одна функция к нескольким input полям fabrique Общие вопросы Javascript 5 01.08.2012 05:00