Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.01.2019, 23:51
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Как правильно повесить функцию на событие?
Необходимо повесить функцию на событие onchange на input, но только если у input-а класс menu.
Часть HTML:
...
<p><input type="checkbox" checked data-cost="20" data-kkal="200" class="menu">Котлета</p>
...

Весь JS:
onchange = function getResult(){
    var menu = document.getElementsByClassName('menu');
    var cost = 0;
    var kkal = 0;
    for (let index = 0; index < menu.length; index++) {
        if(menu[index].checked) {
            cost += parseFloat(menu[index].getAttribute('data-cost'));
            kkal += parseFloat(menu[index].getAttribute('data-kkal'));
        }
    }
    document.getElementById('cost').innerHTML = cost;
    document.getElementById('kkal').innerHTML = kkal;
}
Ответить с цитированием
  #2 (permalink)  
Старый 03.01.2019, 00:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

CryNet,
document.addEventListener('DOMContentLoaded', function() {
var menu = document.getElementsByClassName('menu');
for (var i = 0; i < menu.length; i++) {
    menu[i].addEventListener('change', getResult)
}

function getResult(){
    var cost = 0;
    var kkal = 0;
    for (let index = 0; index < menu.length; index++) {
        if(menu[index].checked) {
            cost += parseFloat(menu[index].getAttribute('data-cost'));
            kkal += parseFloat(menu[index].getAttribute('data-kkal'));
        }
    }
    document.getElementById('cost').innerHTML = cost;
    document.getElementById('kkal').innerHTML = kkal;
}
});
Ответить с цитированием
  #3 (permalink)  
Старый 03.01.2019, 00:27
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

О, спасибо. Ещё один маленький вопрос
У меня есть уже выбранные input-ы:
<p><input type="checkbox" checked disabled data-cost="10" data-kkal="75" class="menu">Булочка</p>

Как сделать, чтобы при загрузке страницы уже отображалось значение выбранных input-ов? Раньше была немного другая конструкция функции:
function getResult(){
    var menu = document.getElementsByClassName('menu');
    var cost = 0;
    var kkal = 0;
    for (let index = 0; index < menu.length; index++) {
        if(menu[index].checked) {
            cost += parseFloat(menu[index].getAttribute('data-cost'));
            kkal += parseFloat(menu[index].getAttribute('data-kkal'));
        }
    }
    document.getElementById('cost').innerHTML = cost; // значение выводится тут
    document.getElementById('kkal').innerHTML = kkal;// и здесь
}

getResult();

И достаточно было просто вызвать функцию. В вашей же реализации такое не прокатывает.
Ответить с цитированием
  #4 (permalink)  
Старый 03.01.2019, 01:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от CryNet
В вашей же реализации такое не прокатывает.

<!DOCTYPE html>

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

  <script>
document.addEventListener('DOMContentLoaded', function() {
var menu = document.getElementsByClassName('menu');
for (var i = 0; i < menu.length; i++) {
    menu[i].addEventListener('change', getResult)
}

function getResult(){
    var cost = 0;
    var kkal = 0;
    for (let index = 0; index < menu.length; index++) {
        if(menu[index].checked) {
            cost += parseFloat(menu[index].getAttribute('data-cost'));
            kkal += parseFloat(menu[index].getAttribute('data-kkal'));
        }
    }
    document.getElementById('cost').innerHTML = cost;
    document.getElementById('kkal').innerHTML = kkal;
}
getResult();
});
  </script>
</head>

<body>
<div id="cost"></div>
<div id="kkal"></div>
<p><input type="checkbox" checked disabled data-cost="10" data-kkal="75" class="menu">Булочка</p>
<p><input type="checkbox" checked disabled data-cost="10" data-kkal="75" class="menu">Булочка</p>
<p><input type="checkbox" checked disabled data-cost="10" data-kkal="75" class="menu">Булочка</p>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 03.01.2019, 01:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

CryNet,
<!DOCTYPE html>

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

  <script>
document.addEventListener('DOMContentLoaded', function() {
var menu = document.getElementsByClassName('menu');
for (var i = 0; i < menu.length; i++) {
    menu[i].addEventListener('change', getResult)
}

function getResult(){
    var cost = 0;
    var kkal = 0;
    for (var index = 0; index < menu.length; index++) {
        if(menu[index].checked) {
            cost += +menu[index].dataset.cost;
            kkal += +menu[index].dataset.kkal;
        }
    }
    document.getElementById('cost').innerHTML = cost;
    document.getElementById('kkal').innerHTML = kkal;
}
getResult();
});
  </script>
</head>

<body>
<div id="cost"></div>
<div id="kkal"></div>
<p><input type="checkbox" checked disabled data-cost="10" data-kkal="75" class="menu">Булочка</p>
<p><input type="checkbox" checked disabled data-cost="10" data-kkal="75" class="menu">Булочка</p>
<p><input type="checkbox" checked disabled data-cost="10" data-kkal="75" class="menu">Булочка</p>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 03.01.2019, 01:58
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

А, я понял почему у меня не вышло. Спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как правильно вызвать функцию только по success? imedia Элементы интерфейса 9 22.09.2014 08:43
Как из функции вызвать другую функцию и правильно передать ей параметр Alexd Общие вопросы Javascript 3 06.05.2011 03:42
jScrollPane scrollTo, как повесить callback функцию на окончание прокрутки? com-meta jQuery 5 10.06.2010 23:14
Как повесить событие без редактирования файла? bilbas Общие вопросы Javascript 8 11.09.2009 15:17
Как правильно обработать событие? BAnder Events/DOM/Window 19 03.02.2009 14:09