Давайте начнем с рассмотрения, почему ваше предложение не работает. Это просто вопрос времени или, другими словами, когда все исполняется. В вашем коде (который не очень хорошо структурирован, но об этом позже) вы выполняете
let clothes = document.getElementById('cloth').value;
в самом начале скрипта. В этом случае вы не получаете какую-либо форму ссылки, которая позволила бы вам прочитать значение на более позднем этапе, но фактическое значение в то время. Поскольку ваше поле input
имеет атрибут value
, установленный на пустую строку, это все, что вы когда-либо получите, независимо от того, сколько раз вы выполните функцию позже.
Чтобы получить значение для ввода наВо время вызова вашего метода вам придется переместить его в саму функцию .
Но, как я уже упоминал ранее, ваш код в целом плохо структурирован, поэтому позвольте мне дать несколько предложений.
button
типа submit по умолчанию выполняет отправку формы, если она помещена в форму;Вы не пользуетесь этим (это дает преимущества, такие как возможность отправить форму с помощью клавиши «Ввод», например,
размещение <script>
в середине документа - плохой выбор, поскольку он блокируетрендеринг остальной части документа. Наилучшие варианты - поместить его в пределах <head>
при использовании с атрибутом defer
или в конце документа непосредственно перед закрытием тега </body>
.
Вложение вашей функции друг в друга здесь не имеет смысла. Вы можете легко определить их независимо и вызывать одно в другом, если необходимо.
заголовочный элемент <h4>
не может появляться внутри <p>
tag
Пример
<!DOCTYPE html>
<html>
<head>
<title>Madder Libs</title>
</head>
<body>
<form action="/" onsubmit="return showThis()">
<div>
<label for="cloth">Piece of clothing:</label>
<input id="cloth" type="text" value="" />
</div>
<div id="madlibs"></div>
<div>
<button type="submit">Show Message</button>
</div>
</form>
<script>
// let's get references to our elements, so we don't have to
// do it multiple times
let clothes = document.getElementById('cloth');
let madlibs = document.getElementById('madlibs');
// let's define our functions
function display(message) {
let sayThis = `I wear a ${message.a} on sundays.`;
return sayThis;
}
function showThis() {
const clothesValue = clothes.value;
let libs = {
a: clothesValue,
/*b: firstBodyPart,
c: secondBodyPart,
d: verbOne,
e: thirdBodyPart,
f: verbTwo,
g: firstNoun,
h: secondNoun,
i: verbThree,*/
};
madlibs.innerHTML += "<br/>" + display(libs);
return false;
}
</script>
</body>