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

为何JavaScript动态创建的div无法被其他JS函数访问并返回null

问题根因

setAttribute() 方法执行后的返回值为undefined,你代码中直接将创建div的操作和设置属性的操作链式调用后赋值给emaildetails变量,最终变量存储的值是undefined而非DOM元素。后续执行document.body.append(emaildetails)时实际没有将目标div插入到页面DOM树中,因此load_mailbox函数查询#email-details元素时返回null,触发样式赋值报错。

修复方案

将创建元素、设置属性、插入DOM的逻辑拆分编写即可:

document.addEventListener('DOMContentLoaded', function() {
  // 拆分三步操作,避免链式调用导致的返回值错误
  const emaildetails = document.createElement('div');
  emaildetails.setAttribute('id','email-details');
  document.body.append(emaildetails);

  // 剩余原有逻辑保持不变
  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);
  document.querySelector('#compose-form').onsubmit = sendmail;
  load_mailbox('inbox');
});

补充说明

如果想保留链式写法,可以使用元素的id属性直接赋值,该属性赋值后会返回元素本身,支持链式调用:

const emaildetails = document.createElement('div');
emaildetails.id = 'email-details';

拆分写法可读性更高,更易维护,更推荐使用。

内容的提问来源于stack exchange,提问作者lony235

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:09:03