You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未填收件人弹窗后,如何让页面保留在邮件撰写视图?

问题解决:收件人为空时停留在邮件撰写视图

核心问题是你没阻止表单的默认提交行为。当收件人输入为空时,弹窗提示后,表单还是执行了默认提交动作,导致页面跳转到收件箱,这时候再调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:54:33