Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   По нажатию на кнопку изменять число (https://javascript.ru/forum/dom-window/61606-po-nazhatiyu-na-knopku-izmenyat-chislo.html)

r1sus 25.02.2016 20:34

По нажатию на кнопку изменять число
 
Добрый вечер! Я совсем еще новичок, поэтому просьба доступно обьянить или ткнуть где прочитать. Подскажите пожалуйста, что не так с кодом? Само значение элемента выводится, но при нажатии на кнопку + появляется ошибка.(undefined). почти тот же код работает если элемент count заменить на id , и обращаться getElementById. Но так как подобных элементов несколько заменила на класс и все(
<input name="plus" type="button" value="+" onclick="addNum()"> <p class="count">1</p>

if (document.getElementsByClassName('count')!==null) {
    var elem = document.getElementsByClassName('count');
    for (var i = 0; i < elem.length; i++) {
        elem[i] = elem.innerHTML;
        console.log(elem[i].innerHTML);
        var num = +elem[i].innerHTML;
        function addNum() {
            num++;
            elem[i].innerHTML = num;
        }
    }
}

рони 25.02.2016 21:28

r1sus,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
 </head>

<body>
<input class="plus" type="button" value="+" > <p class="count">1</p>
<input class="plus" type="button" value="+" > <p class="count">1</p>
<script>
window.addEventListener('DOMContentLoaded', function() {
var p = document.querySelectorAll('.count');
[].forEach.call(document.querySelectorAll('.plus'), function(input,i) {
        input.addEventListener('click', function() {
            p[i].innerHTML -= -1
        });
    });
});

</script>
</body>

</html>

r1sus 25.02.2016 21:38

рони,
Спасибо большое за такой быстрый ответ. Ваше решение прекрасно работает, но к сожалению, оно не родилось у меня в голове . подскажите ход моих мыслей совсем неверный? вы не могли бы хоть намекнуть что я делаю не так? спасибо за понимание

рони 25.02.2016 21:47

r1sus,
по вашему коду: функция в onclick, должна сама догадатся, какая она по счёту

r1sus 25.02.2016 21:49

рони,
спасибо!

Coriolan161 25.02.2016 22:42

r1sus,
jsfiddle.net/Coriolan161/n0jucts1/

r1sus 25.02.2016 22:56

Coriolan161,
Спасибо за предложенное решение! Более понятное для меня решение

r1sus 25.02.2016 23:14

Coriolan161,
У меня была задача избавится от id, так как на странице несколько count и у каждого есть кнопка +. Но все равно большое спасибо за участие

anna4 19.10.2016 04:08

Помогите пожалуйста, как кнопке прописать это значение <span id="numberPlus">0</span> :help:

warren buffet 19.10.2016 07:04

anna4, попробуй еще раз. )

anna4 19.10.2016 07:10

Есть скрипт, как необходимым кнопка задать id
<script>
;(function(){
/* Это код отвечающий за клики по кнопкам
с увеличением числа.
Необходимым кнопкам необходимо указать id: plus
(при редактировании кнопки на вкладке: "действия"
И указать на странице число оборнутое в спан с
определленым id:<span id="numberPlus">0</span>
*/
var btnAll = document.querySelectorAll('.btn[hack-data-id=plus]');
var number = document.getElementById('numberPlus');
var n = 339;
number.innerHTML = localStorage.plusNumber || 0;
for (var i = 0; i < btnAll.length; i++) {
btnAll[i].setAttribute('data-click', 'true');
};
document.body.addEventListener('click', function(event) {
var targ = event.target;
if (check(targ)) {
updateNum();
targ.setAttribute('data-click', 'false');
}
else if (check(targ.parentNode)) {
updateNum();
targ.parentNode.setAttribute('data-click', 'false');
}
});

function updateNum() {
lastZn = +localStorage.plusNumber || 0;
localStorage.plusNumber = lastZn + n;
number.innerHTML = localStorage.plusNumber;
};

function check(elem){
return ~elem.className.search('btn') &&
elem.getAttribute('hack-data-id') === 'plus' &&
elem.getAttribute('data-click') === 'true';
};
}());

</script>


<p style="text-align: right; line-height: 1;"><strong>Баланс: <span id="numberPlus">0</span></strong></p>

anna4 19.10.2016 10:08

Помогите сделать кнопку с этим значением <span id="numberPlus">0</span>


Часовой пояс GMT +3, время: 12:30.