如何用JavaScript修改头部内容?问候功能代码无法运行求助
问题排查与修复方案
核心问题分析
你的代码存在几个关键问题导致功能失效:
- 函数未被调用:
greet()函数仅定义但未执行,页面加载时不会自动触发 - HTML实体导致语法错误:JavaScript代码中使用了
&&&、>、<等HTML实体,而非原生的&&、>、<运算符,造成语法解析失败 - JSP变量未加引号:
session.getAttribute("user")的输出直接拼接到JavaScript中,若用户名是字符串会引发引用错误 - 未处理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原生运算符(
&&&→&&,>→>,<→<) - 引号包裹变量:用单引号包裹JSP表达式,确保用户名被当作字符串处理
- null值处理:使用三元运算符判断user是否存在,避免出现
null字样的问候语 - 优化初始状态:将初始文本改为"Loading...",提升用户体验
额外优化建议
如果用户名可能包含单引号(如O'Neil),需要对单引号进行转义,避免破坏JavaScript字符串结构:
'<%%= session.getAttribute("user") != null ? session.getAttribute("user").replace("'", "\\'") : "" %>'
内容的提问来源于stack exchange,提问作者rnlsn
相关产品推荐
相关产品推荐

