• 05浏览器-03-操作表单和文件


    1、操作表单

    1.1 表单提交

    之前提到过使用JS操作DOM,实际上这里操作表单的方式是一样的。

    获取表单中的值和状态等,再对其节点加以利用其属性如value、checked等属性就可以了。

    这里主要描述表单提交的方式,一般浏览器默认点击 <button type="submit"> 时提交表单,实际上,我们稍作变化,下面也是我们经常可以使用的提交表单的方式:

    第一种
    • button响应click事件,触发方法抓取节点form,通过该对象的submit()方法进行提交
    <!-- HTML --> 
    <form id="test-form">
        <input type="text" name="test">
        <button type="button" onclick="doSubmitForm()">Submit</button>
    </form>
    
    <script>
    function doSubmitForm() {
        var form = document.getElementById('test-form');
        // 可以在此修改form的input...
        // 提交form:
        form.submit();
    }
    </script>

    第二种
    • 响应<form>的onsubmit事件,提交form时作修改
    <!-- HTML -->
    <form id="test-form" onsubmit="return checkForm()">
        <input type="text" name="test">
        <button type="submit">Submit</button>
    </form>
    
    <script>
    function checkForm() {
        var form = document.getElementById('test-form');
        // 可以在此修改form的input...
        // 继续下一步:
        return true;
    }
    </script>
    return true来表示浏览器继续提交,如果return false,浏览器将不会继续提交form。这种情况通常对应用户输入有误,提示用户错误信息后终止提交form。

    1.2 密码提交

    很多登录表单希望用户输入用户名和口令,但是,安全考虑,提交表单时不传输明文口令,而是口令的MD5。

    所以在提交之前通过JS转换:
    function checkForm() {
        var pwd = document.getElementById('password');
        // 把用户输入的明文变为MD5:
        pwd.value = toMD5(pwd.value);
        // 继续下一步:
        return true;
    }

    这就是你有时候输入了账号密码,发现点击登陆提交时,密码框的显示会突然从几个星变成32个星(因为MD5有32个字符)

    如果不想有这种页面的明显变化,可以利用hidden的input,用来存储MD5和提交:
    <!-- HTML -->
    <form id="login-form" method="post" onsubmit="return checkForm()">
        <input type="text" id="username" name="username">
        <input type="password" id="input-password">
        <input type="hidden" id="md5-password" name="password">
        <button type="submit">Submit</button>
    </form>
    
    <script>
    function checkForm() {
        var input_pwd = document.getElementById('input-password');
        var md5_pwd = document.getElementById('md5-password');
        // 把用户输入的明文变为MD5:
        md5_pwd.value = toMD5(input_pwd.value);
        // 继续下一步:
        return true;
    }
    </script>
    注意到id为md5-password的<input>标记了name="password",而用户输入的id为input-password的<input>没有name属性。没有name属性的<input>的数据不会被提交

    2、操作文件

    在HTML表单中,可以上传文件的唯一控件就是<input type="file">

    注意:当一个表单包含<input type="file">时,表单的enctype必须指定为 multipart/form-datamethod必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据。

    处于安全考虑,JS无法获取上传的某个文件的真实路径,也无法通过更改<input type="file">的value属性来改变文件内容。

    通常,对于文件上传,JS在前台对文件扩展名做检查,防止上传无效格式的文件。而文件的处理,都是由后台服务器来处理。

  • 相关阅读:
    84. Largest Rectangle in Histogram (Solution 2)
    84. Largest Rectangle in Histogram (Solution 1)
    73. Set Matrix Zeroes
    【JavaScript】Symbol 静态方法
    【JavaScript】Date
    【JavaScript】Math
    725. Split Linked List in Parts把链表分成长度不超过1的若干部分
    791. Custom Sort String字符串保持字母一样,位置可以变
    508. Most Frequent Subtree Sum 最频繁的子树和
    762. Prime Number of Set Bits in Binary Representation二进制中有质数个1的数量
  • 原文地址:https://www.cnblogs.com/deng-cc/p/6677157.html
Copyright © 2020-2023  润新知