Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Идентификация нажатой кнопки (https://javascript.ru/forum/misc/75081-identifikaciya-nazhatojj-knopki.html)

link404 31.08.2018 16:01

Идентификация нажатой кнопки
 
Добрый всем день. На странице имеется несколько кнопок:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="script.js"></script>
</head>
<body>
    <button type="submit" class="btn btn-primary btn-md" name="point" value="1">button 1</button>
    <button type="submit" class="btn btn-primary btn-md" name="point" value="2">button 2</button>
    <button type="submit" class="btn btn-primary btn-md" name="point" value="3">button 3</button>
</body>
</html>


хочу определить какая кнопка была нажата. Пишу так:

window.onload = () => {
    var buttons = document.getElementsByClassName("btn");
    if (buttons.length > 0) {
        for (var i = 0; i < buttons.length; i++) {
            buttons[i].onclick = receiver(buttons[i]);
        }
    }
};

function receiver(val) {
    console.log("click: " + val.value);
}


почему в консоли при релоаде страницы вижу это?
Код:

click: 1
click: 2
click: 3

Ведь нажатий по кнопкам еще не было. Вдобавок при клике на них ничего не происходит. Что я делаю не так? Заранее спасибо.

Aetae 31.08.2018 16:29

Что cделает следующий код, что окажется в foo?
function plus(a, b){
  return a + b
}
foo = plus(2, 2);

А теперь по аналогии:
foo.onclick = receiver(bar);

ksa 31.08.2018 16:35

Цитата:

Сообщение от link404
console.log("click: " + val.value);

Замени на
return function(){console.log("click: " + val.value);};


<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
window.onload = () => {
    var buttons = document.getElementsByClassName("btn");
    if (buttons.length > 0) {
        for (var i = 0; i < buttons.length; i++) {
            buttons[i].onclick = receiver(buttons[i]);
        }
    }
};
function receiver(val) {
    return function(){alert("click: " + val.value);};
}
</script>
</head>
<body>
    <button type="submit" class="btn btn-primary btn-md" name="point" value="1">button 1</button>
    <button type="submit" class="btn btn-primary btn-md" name="point" value="2">button 2</button>
    <button type="submit" class="btn btn-primary btn-md" name="point" value="3">button 3</button>
</body>
</html>

link404 31.08.2018 16:46

Ага, понял в чем была ошибка. Большое всем спасибо!


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