美文网首页CreatShare
当我把 <button> 按钮放到了 <for

当我把 <button> 按钮放到了 <for

作者: McDu | 来源:发表于2016-12-08 16:36 被阅读57次

    标签(空格分隔): html ajax servlet form


    1.问题描述


    这是一个填写用户名和消息后,点击 encryptMessage 按钮后可以获得加密后的消息的表单,当我想通过 ajax 获取到 servlet 处理后的结果时,我的 message.jsp 页面部分代码如下:

        <form action="AddEncrptMessage" method="post">
            input message:
            <input type="text" name="message" id="message">
            <br> send to this guy (his username) :
            <input type="text" name="username" id="username">
            <br>
            <button onClick="encrypt();" id="btn">encryptMessage</button>
            <br> encryptedMessage:
            <div id="show"></div>
            <textarea rows="5" cols="30" name="encryptMes"
                id="showEncrytedMessage"></textarea>
            <br>
            <input type="submit" name="submit" value="submit">
            <br>
        </form>
    

    我的 javascript 代码 :

    function createHttpRequest(method, url, callback) {
        httpRequest = false;
        if (window.XMLHttpRequest) {
            httpRequest = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            try {
                httpRequest = new ActiveXObject("Msxm12.XMLHTTP");
            } catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                }
            }
    
        }
    
        if (!httpRequest) {
            alert("can not create XMLHttpRequest object .");
            return false;
        }
    
        httpRequest.onreadystatechange = callback;
        httpRequest.open(method, url, true);
        httpRequest.send(null);
    
    }
    
    function encrypt() {
        var username = document.getElementById("username").value;
        var message = document.getElementById("message").value;
        var url = "EncryptMessageServlet?message=" + encodeURI(encodeURI(message))
                + "&username=" + encodeURI(encodeURI(username));
        createHttpRequest("GET",url, getEncrypt);
    }
    
    function getEncrypt() {
        if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
                document.getElementById("showEncrytedMessage").innerHTML = httpRequest.responseText;
            } else {
                alert("ERROR");
            }
        }
    }
    

    按理说我当我输入username=1111,password=hello,点击encryptMessage按钮后textarea里应出现加密后的消息,可是当我点了按钮后 url 一直显示:

    localhost:8080/homework/message.jsp?username=1111&message=hello

    但是当我在地址栏输入:

    localhost:8080/homework/AddEncrptMessage?username=1111&message=hello

    即直接请求 Servlet 时,页面输出了加密后的消息。

    2.<button> 按钮捣的鬼


    当在form表单里使用

        <input type="button" value="encryptMessage" id="btn"
                onClick="encrypt();" />
    

    代替:

    <button onClick="encrypt();" id="btn">encryptMessage</button>
    

    一切正常了。

    3.原因所在


    W3School 上有说:

    请始终为按钮规定 type 属性。Internet Explorer 的默认类型是 "button",而其他浏览器中(包括 W3C 规范)的默认值是 "submit"。

    <button>type 属性:

    • button
    • reset
    • submit

    还有:

    重要事项:如果在 HTML 表单中使用 button 元素,不同的浏览器会提交不同的值。Internet Explorer 将提交 <button> 与 <button/> 之间的文本,而其他浏览器将提交 value 属性的内容。请在 HTML 表单中使用 input 元素来创建按钮。

    相关文章

      网友评论

        本文标题:当我把 <button> 按钮放到了 <for

        本文链接:https://www.haomeiwen.com/subject/cjesmttx.html