#javascript #json #event-handling
#javascript #json #обработка событий
Вопрос:
Моя первоначальная проблема заключалась в том, что он получал значение, когда пользователь нажимал на кнопку создания, но не на кнопку отправки.
Теперь я изменил его, чтобы использовать другую новую функцию, когда пользователь нажимает отправить. Однако теперь он ничего не делает.
Может кто-нибудь сказать мне, что я делаю не так? Я использовал метод onclick в HTML, а затем создал функцию на своей странице Javascript.
HTML:
<div id="compose-view">
<h3>New Email</h3>
<form id="compose-form"
method="POST">
{% csrf_token %}
<div class="form-group">
From: <input disabled class="form-control" value="{{ request.user.email }}">
</div>
<div class="form-group">
To: <input id="compose-recipients" class="form-control">
</div>
<div class="form-group">
<input class="form-control" id="compose-subject" placeholder="Subject">
</div>
<textarea class="form-control" id="compose-body" placeholder="Body"></textarea>
<input type="submit" id="sendEmail" class="btn btn-primary"/>
</form>
</div>
JS:
const element = document.getElementById('sendEmail');
element.addEventListener('click', function() {
fetch('/emails', {
method: 'POST',
body: JSON.stringify({
recipients: 'card51short@gmail.com',
subject: "buglets",
body: 'Hes a fat one'
})
})
.then(response => response.json())
.then(result => {
// Print result
console.log(result);
});
});
}
Комментарии:
1. Пожалуйста, уточните, что не работает. Вы получаете какие-либо ошибки? Вы проверили, что
fred
переменная содержит что-либо, а неundefined
нет?2. он пустой. Ошибок нет.
3. Что
console.log(fred)
печатается?4. Что вы подразумеваете под «ничего не делать»?
5. функция выполняется не так, как предполагалось. Ничего не происходит. Ошибок нет. Однако я снова изменил свой код.
Ответ №1:
Хорошо, в таких случаях вам необходимо провести исследование вашего кода:
- Проверьте
fred
, действительно ли это строка, и нетundefined
. Кроме того, сделайте его явной константой
const fred = document.querySelector('#compose-subject').value // changed
console.log(fred); // new
fetch('/emails', {
method: 'POST',
body: JSON.stringify({
recipients: 'card51short@gmail.com',
subject: fred,
body: 'Hes a fat one'
})
})
.then(response => response.json())
.then(result => {
// Print result
console.log(result);
});
- Если все в порядке, выполните следующую проверку того, что возвращается выборкой:
const fred = document.querySelector('#compose-subject').value
fetch('/emails', {
method: 'POST',
body: JSON.stringify({
recipients: 'card51short@gmail.com',
subject: fred,
body: 'Hes a fat one'
})
})
.then(response => { // edited
console.log(response); // new
return response.json() // edited
}) // edited
.then(result => {
// Print result
console.log(result);
});
К концу этого процесса вы должны найти то, что не работает
Комментарии:
1. Спасибо. Я изменил свою проблему выше, если вы можете это проверить. Я понял, почему он получал пустой элемент — он получал значение элемента до того, как пользователь его заполнил. Теперь у меня возникла новая проблема. Спасибо!
2. Пожалуйста, отметьте ответ как принятый, если он вам помог 🙂
Ответ №2:
атрибут «value» возвращает неопределенное значение для тегов, отличных от входных. Попробуйте вместо этого использовать innerHTML:
fred = document.querySelector('#compose-subject').innerHTML;
проверьте свое значение для fred с помощью cosole.log:
console.log(fred);
Комментарии:
1.
innerHTML
не возвращает значение ввода. Мы не знаем, является ли#compose-subject
это вводом или нет, но я предполагаю, что это так.2. @robo robok я согласен. Обновлен приведенный выше ответ.
3. журнал консоли полностью пуст. Ничего не показывает.
4. Я думаю, что знаю, в чем проблема. Значения передаются, когда пользователь нажимает «Создать электронное письмо» … а не когда он нажимает «Отправить электронное письмо». таким образом, он не получает никаких значений, поскольку выполняет проверку сразу после открытия формы создания электронной почты. Я хочу, чтобы он получал значения после того, как пользователь нажимает кнопку отправки
5. ребята, вы можете ознакомиться с моим новым выпуском выше? Он запускает функцию после нажатия кнопки отправки. Спасибо