Не могу получить данные из формы и вывести в консоль
Есть маленикий кусок html, к которому прикреплен отдельным файлом js. Пробовала alert() и console.log но нет никакого результата. В чем проблема?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="jstest.js">
</head>
<body>
<form id="form">
<input type="text" id="name" name="name">
<input type="text" id="age" name="age">
<input type="submit" id="button" value="click">
</form>
</body>
</html>
<script>
var form = document.getElementById('#form').value;
var age = document.getElementById('#name').value;
var name = document.getElementById('#age').value;
var button = document.getElementById('#button');
button.onclick=func();
function func(){
if (age==10){
alert("You wrote 10");
}
else{alert("You wrote something else");
}
}
</script>
Ответы (1 шт):
Пройдёмся по-порядку:
Когда вы используете
document.getElementById, то при передаче аргумента не надо писать#. Это надо писать если вы используетеdocument.querySelector. Когда вы пишите#some-idпри вызовеdocument.getElementById, то он ищет неid=some-id, а ищетid=#some-idЕсли вам надо повесить событие на сабмит формы, то не надо слушать событие
clickна кнопкеsumbit(не то что невозможно, но лучше не стоит), вместо этого вешайте слушателя на событиеsubmitу формы. Так вы с помощьюe.preventDefault()сможете предотвратить перезагрузку страницы, послеsubmit-аБольше не нужно писать лишний код для того чтобы достать значения полей у формы. Достаточно передать компоненту
formв new FormData() и он за вас сделает всю грязную работу. Главное не забыть проставить аттрибутnameу инпутов, потому что значения вы будете доставать именно по нимПри взятии значения из инпута вы получите строку, даже если ввели число. Потому очень важно об этом помнить и приводить данные к тому типу, который вам нужен
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="jstest.js">
</head>
<body>
<form id="form">
<input type="text" id="nameInput" name="nameValue">
<input type="text" id="ageInput" name="ageValue">
<input type="submit" id="button" value="click">
</form>
<script>
const form = document.getElementById('form');
form.addEventListener('submit', (e) => {
e.preventDefault();
const formData = new FormData(form);
const age = formData.get('ageValue');
console.log(`typeof ${age} is ${typeof age}`);
checkAge(Number(age));
})
function checkAge(age) {
if (age === 10) {
console.log("You wrote 10");
} else {
console.log("You wrote something else");
}
}
</script>
</body>
</html>