首页 > 解决方案 > 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>

标签: jqueryjsp

解决方案


两者都被执行,因为您将服务器端技术与前端技术混合在一起。

在您的服务器向客户端发送 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?


推荐阅读