首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在JavaScript代码中,组合两个函数不起作用,但在单个函数中可以正常工作

在JavaScript代码中,组合两个函数不起作用,但在单个函数中可以正常工作
EN

Stack Overflow用户
提问于 2020-10-01 14:36:49
回答 1查看 115关注 0票数 0

CS50网站的project3邮件

当我使用单一功能时,它工作正常,这是

代码语言:javascript
运行
复制
function compose_email() {

  // Show compose view and hide other views
  document.querySelector('#read-view').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 = '';

  document.querySelector('#compose-form').onsubmit = function() {

    let recipient = document.querySelector('#compose-recipients');
    let subject = document.querySelector('#compose-subject');
    let body = document.querySelector('#compose-body');
  
    fetch('/emails', {
      method: 'POST',
      body: JSON.stringify({
        recipients: recipient.value,
        subject: subject.value,
        body: body.value,
      })
    })
    .then(response => response.json())
    .then(result => {
      console.log(result);
    });
    load_mailbox('sent')
    return false;
  };
};

但是,当我将它拆分为两个函数时,它不会加载load_mailbox('sent')

代码语言:javascript
运行
复制
function compose_email() {

  // Show compose view and hide other views
  document.querySelector('#read-view').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 = '';

  document.querySelector('#compose-form').onsubmit = function() {
    send_email();
   
  };
};
代码语言:javascript
运行
复制
function send_email() {
let recipient = document.querySelector('#compose-recipients');
    let subject = document.querySelector('#compose-subject');
    let body = document.querySelector('#compose-body');
  
    fetch('/emails', {
      method: 'POST',
      body: JSON.stringify({
        recipients: recipient.value,
        subject: subject.value,
        body: body.value,
      })
    })
    .then(response => response.json())
    .then(result => {
      console.log(result);
    });
    load_mailbox('sent')
    return false;
};
EN

回答 1

Stack Overflow用户

发布于 2020-10-01 14:56:00

调用方正在忽略send_email中的return false

让调用者返回该结果,这样就可以防止默认行为。

代码语言:javascript
运行
复制
document.querySelector('#compose-form').onsubmit = function() {
    return send_email();
//   ^^^
};

或者只是将send_email指定为处理程序。确保不包括() call operator。

代码语言:javascript
运行
复制
document.querySelector('#compose-form').onsubmit = send_email;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64150222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档