Как сохранить ввод из текстового поля, а затем перейти на следующую страницу? (Javascript / HTML)

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

Я начал с приглашения, в котором пользователей просили объяснить свои ответы (что отлично сработало!), Однако меня попросили изменить это на поле ввода.

По сути, процесс, который мне нужно сделать, это:

User enters in text box -> Clicks next button -> save input to session variable and move to next page

Пока у меня в теле есть следующий HTML-код:

<form name = "next" action='#' method=post>
    Explanation:<input type = "text" id = "xp" required><br>
    <button class = "nextButton" onclick = "return explanation()">Next</button>
</form>

с соответствующим javascript:

function explanation() {
        var exp = document.getElementById('xp').value;
        sessionStorage.setItem("p1_reason", exp);
        alert(exp);
        document.location.href = 'page2.html';
    }

Пока что результат:

  • Текстовое поле очищается, но ничего не сохраняется и не отображается на экране.
  • Следующая страница не отображается.

Любая помощь / совет будут оценены. Я относительно новичок в js, поэтому буду благодарен! Я прекрасно понимаю, что вокруг есть похожие вопросы, я просто не понимаю, в чем я ошибаюсь.

вы хотите, чтобы значение xp отображалось на странице 2?

jremi 06.11.2018 18:08

Вы говорите, что на экране ничего не отображается, вы имеете в виду, что alert тоже не отображается? Кроме того, вы не показываете код, считываемый с sessionStorage.

Herohtar 06.11.2018 18:09

У вас есть два варианта: вернуть false в вашей функции или указать action = 'page2.html'

Harish U Warrier 06.11.2018 18:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
432
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Когда вы нажимаете nextButton, браузер запускает explanation(), а затем пытается выполнить action вашей формы. Поскольку ваше действие - action='#', оно просто пытается перезагрузить страницу, не позволяя document.location.href работать должным образом.

На самом деле, вы можете попробовать ничего не вводить в поле и нажимать на кнопку. Перенаправление будет работать, потому что форма пуста, поэтому отправлять нечего.

Ответ принят как подходящий

@ Дэвид прав. Вы можете добавить функцию event.preventDefault(), чтобы предотвратить поведение формы по умолчанию - отправку. В противном случае кажется, что ваш код работает.

function explanation() {
    event.preventDefault(); // <-- add here
    var exp = document.getElementById('xp').value;
    sessionStorage.setItem("p1_reason", exp);
    alert(exp);
    window.location.href = 'page2.html';
}

Также не используйте document.location.href, он устарел. Лучше использовать window.location.href.

@ Дэвид: Спасибо. Если честно, я не был уверен, пришлось использовать гугл.

HynekS 06.11.2018 18:57

Спасибо за быстрый ответ, это сработало отлично.

nyep 07.11.2018 10:24

Другие вопросы по теме