jquery - jquery中的多个条件
问题描述
我有两个事件,我没有明白这里有什么问题都被执行,即如果change
发生,click
也被执行。作为其他选择,是否可以<c:choose>...</c:choose>
用于多个事件?
谢谢!
<script>
$(document).ready(function () {
$('#idSelect').change(function (){
<c:set var="messjSelect" value="10" scope="session"/>;
<c:set var="messjRefresh" value="0" scope="session"/>;
});
});
</script>
<script>
$(document).ready(function () {
$('#refreshButton').click(function () {
<c:set var="messjRefresh" value="0" scope="session"/>;
<c:set var="messjSelect" value="0" scope="session"/>;
alert("do iT! ${messjSelect}");
});
});
</script>
解决方案
两者都被执行,因为您将服务器端技术与前端技术混合在一起。
在您的服务器向客户端发送 jsp 文件之前,它会查找任何与 java 相关的代码并运行它。这意味着您在 jsp 页面中的 JSTL/EL 将在您的 html/css/js 之前运行。
因此,澄清一下,<c:set
您在那里拥有的标签都可以运行,因为它是服务器端技术。如果您在 javascript 中指定仅在单击后运行,则无关紧要。无论如何它都会运行。JSTL/EL 和 javascript 并没有像您认为的那样协同工作。
你怎么能解决这个问题?
一种可能的解决方案是将 AJAX 请求发送到 servlet。在那个 servlet 中,您处理会话变量,然后返回您想要的任何内容。例如:
<script>
$(document).ready(function () {
$('#idSelect').change(function (){
$.post("../SelectChangeServlet");
});
});
</script>
<script>
$(document).ready(function () {
$('#refreshButton').click(function () {
$.post("../RefreshButtonServlet", function(response) {
alert("do iT: "+ response);
});
});
});
</script>
SelectChangeServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = (request.getSession()); //get session
int messjSelect = 10;
int messjRefresh = 0;
session.setAttribute("messjRefresh", messjRefresh);
session.setAttribute("messjSelect", messjSelect);
System.out.println("You will see this text in IDE console when #idSelect is changed");
}
RefreshButtonServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = (request.getSession()); //get session
int messjSelect = 0;
int messjRefresh = 0;
session.setAttribute("messjRefresh", messjRefresh);
session.setAttribute("messjSelect", messjSelect);
System.out.println("You will see this text in IDE console when button is clicked");
response.setContentType("text/plain"); // Set content type of the response so that jQuery knows what it can expect.
response.setCharacterEncoding("UTF-8");
response.getWriter().write(Integer.toString(messjSelect)); //return messjSelect for alert (needs to be a string)
}
更多关于 Ajax 和 Servlets 的信息: 如何使用 Servlets 和 Ajax?
推荐阅读
- javascript - 如何使用 CodeceptJs 定位和输入 SimpleMde RichText 编辑器
- typescript - 断言对于 const 数组的每个值,一个对象都有一个键
- github - 如何在我的 github 托管网站上添加 google adsense?
- google-chrome - 从 HTTPS 页面访问 HTTP 图像源时来自 Chrome 87 的混合内容警告
- python - python asyncio aiohttp超时
- ethereum - solidity 将结构添加到数组并使用 web3 显示它没有按预期工作
- python - 实时更新烛台图表?
- winforms - WinForms:带有 EF 的 DataGridView 不显示新行
- spring-boot - 使用 JUnit5+Spring Security 测试 Spring Boot 控制器
- angular - angular 10 ssr 不适用于请求 api