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

如何用JavaScript修改头部内容?问候功能代码无法运行求助

问题排查与修复方案

核心问题分析

你的代码存在几个关键问题导致功能失效:

  1. 函数未被调用:greet() 函数仅定义但未执行,页面加载时不会自动触发
  2. HTML实体导致语法错误:JavaScript代码中使用了&amp;&&、&gt;、&lt;等HTML实体,而非原生的&&、>、<运算符,造成语法解析失败
  3. JSP变量未加引号:session.getAttribute("user")的输出直接拼接到JavaScript中,若用户名是字符串会引发引用错误
  4. 未处理null值:若session中没有user属性,会拼接出null字样的奇怪问候语

修复后的完整代码

<body style="background-color:rgb(255, 255, 255)">
  <h3 style="color: green">
    <%=ServletUtility.getSuccessMessage(request)%>
  </h3>
  <br>
  <h3 class="greeting" id="greeting">
    Loading...
  </h3>
  <script>
    function greet(){
      var date1 = new Date();
      var hour = date1.getHours();
      var header = document.getElementById("greeting");
      // 处理session中user为null的情况,默认空字符串
      var username = '<%= session.getAttribute("user") != null ? session.getAttribute("user") : "" %>';
      
      if(hour > 0 && hour <= 12){
        header.innerHTML = "Good Morning " + username;
      } else if (hour > 12 && hour <= 18){
        header.innerHTML = "Good Afternoon " + username;   
      } else if (hour > 18 && hour <= 22){
        header.innerHTML = "Good Evening " + username;
      } else { 
        header.innerHTML = "Good Night " + username;
      }  
    }
    
    // 页面加载时自动调用函数
    greet();
  </script>
</body>

关键修复点说明

  • 调用函数:在脚本末尾添加greet();,确保页面加载时自动执行问候逻辑
  • 修正语法:将所有HTML实体替换为JavaScript原生运算符(&amp;&&→&&,&gt;→>,&lt;→<)
  • 引号包裹变量:用单引号包裹JSP表达式,确保用户名被当作字符串处理
  • null值处理:使用三元运算符判断user是否存在,避免出现null字样的问候语
  • 优化初始状态:将初始文本改为"Loading...",提升用户体验

额外优化建议

如果用户名可能包含单引号(如O'Neil),需要对单引号进行转义,避免破坏JavaScript字符串结构:

'<%%= session.getAttribute("user") != null ? session.getAttribute("user").replace("'", "\\'") : "" %>'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:15:45