为什么这使用按钮工作,并且使用onkeypress事件无法正常工作

时间:2014-08-04 16:04:59

标签: html ajax internet-explorer servlets onkeypress

当我尝试使用带有按钮的ajax执行方法时,我在div的页面末尾插入一个文本,一切都是正确的:

enter image description here

但是当我尝试使用带有html文本组件的onkeypress的ajax执行方法时,它只显示ajax响应文本而不显示我在视图中的其他组件:

enter image description here

我需要在Internet Explorer上工作

有什么问题?

观点:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="${pageContext.request.contextPath}/views/test.js"
    type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
</head>
<body>
    <form action="test" method="post">
        <div id="div1">
            <table>
                <tr>
                    <td><span>Code: </span></td>
                    <td><input id="field1" name="field1" onkeypress="javascript:insertOnKeyPress()"
                        type="text" /></td>
                    <td><input id="method" name="method" type="hidden"
                        value="insert" /></td>
                    <td><input id="insert" name="insert" onclick="insertButton();"
                        type="button" value="Insert"></td>
                </tr>
            </table>
        </div>
        <div id="div2"></div>
    </form>
</body>
</html>

servlet:

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebServlet("/sc/test")
public class TestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    Logger logger = LoggerFactory.getLogger(TestServlet.class);

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        String method = null;
        try {
            method = request.getParameter("method");
            System.out.println(method);
            if (method == null) {
                getServletConfig().getServletContext().getRequestDispatcher("/views/test.jsp").forward(request, response);
            } else if ("insert".equals(method)) {
                System.out.println(request.getParameter("param1"));
                response.setContentType("text/plain");
                response.setCharacterEncoding("UTF-8");
                response.getWriter().write("response text");
            }
        } catch (Exception exception) {
        }
    }
}

包含以下方法的javascript文件:

function insertOnKeyPress() {
    var tecla = window.event.keyCode;
    if (tecla == 13) {
        var xmlHttp = false;
        try {
            xmlHttp = new ActiveXObject("Msxml2.xmlHttp");
        } catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.xmlHttp");
            } catch (E) {
                xmlHttp = false;
            }
        }

        if (!xmlHttp) {
            xmlHttp = new XMLHttpRequest();
        }

        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4) {
                document.getElementById("div2").innerHTML = xmlHttp.responseText;
            }
        };

        xmlHttp.open("POST", "test", true);
        xmlHttp.setRequestHeader("Content-type",
                "application/x-www-form-urlencoded");
        xmlHttp.send("method=insert&param1=param_test");
    }
}

function insertButton() {
    var xmlHttp = false;
    try {
        xmlHttp = new ActiveXObject("Msxml2.xmlHttp");
    } catch (e) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.xmlHttp");
        } catch (E) {
            xmlHttp = false;
        }
    }

    if (!xmlHttp) {
        xmlHttp = new XMLHttpRequest();
    }

    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            document.getElementById("div2").innerHTML = xmlHttp.responseText;
        }
    };

    xmlHttp.open("POST", "test", true);
    xmlHttp.setRequestHeader("Content-type",
            "application/x-www-form-urlencoded");
    xmlHttp.send("method=insert&param1=param_test");
}

1 个答案:

答案 0 :(得分:1)

更改insertOnKeyPress以阻止 Return 键的默认操作,即提交表单。

if (tecla == 13) {
    var xmlHttp = false;
    window.event.preventDefault();
    ...

顺便说一句,您在javascript:属性的开头不需要onkeypress。在onXXX属性中永远不需要这样做,只有在您将Javascript放入包含网址的属性(例如href或{{1})时才需要它}。