未填收件人弹窗后,如何让页面保留在邮件撰写视图?
问题解决:收件人为空时停留在邮件撰写视图
核心问题是你没阻止表单的默认提交行为。当收件人输入为空时,弹窗提示后,表单还是执行了默认提交动作,导致页面跳转到收件箱,这时候再调用compose_email()已经没用了。
解决步骤:
- 在
alert('At least one recipient is required');之后,添加return false;,直接阻止表单提交,页面就不会跳转 - 删掉
compose_email();,因为这个函数会清空所有输入框,用户之前写的主题和正文会丢失,体验很差
修改后的完整代码如下:
document.addEventListener('DOMContentLoaded', function() { // Use buttons to toggle between views document.querySelector('#inbox').addEventListener('click', () => load_mailbox('inbox')); document.querySelector('#sent').addEventListener('click', () => load_mailbox('sent')); document.querySelector('#archived').addEventListener('click', () => load_mailbox('archive')); document.querySelector('#compose').addEventListener('click', compose_email); // By default, load the inbox load_mailbox('inbox'); }); function compose_email() { // Show compose view and hide other views document.querySelector('#display-email').style.display = 'none'; document.querySelector('#emails-view').style.display = 'none'; document.querySelector('#compose-view').style.display = 'block'; // Clear out composition fields document.querySelector('#compose-recipients').value = ''; document.querySelector('#compose-subject').value = ''; document.querySelector('#compose-body').value = ''; // Send an Email document.querySelector("#compose-form").onsubmit = function(){ const recipients = document.querySelector("#compose-recipients").value; const subject = document.querySelector("#compose-subject").value; const body = document.querySelector("#compose-body").value; if(recipients.length === 0){ alert(`At least one recipient is required`); // 阻止表单默认提交,停留在撰写视图 return false; } else{ fetch('/emails', { method: 'POST', body: JSON.stringify({ recipients: recipients, subject: subject, body: body }) }) .then(response => response.json()) .then(result => { // Print result console.log(result); if(result[`error`]){ alert(`User does not exist`) } else{ load_mailbox("sent"); } }) return false; } } }
额外说明:你原来的else分支里已经加了return false,这是正确的——因为用fetch提交不需要依赖表单的默认提交流程。现在只需要在if分支里补上return false,就能确保所有情况下表单都不会触发默认跳转。
内容的提问来源于stack exchange,提问作者user17470872
相关产品推荐
相关产品推荐

