• 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在前台对文件扩展名做检查,防止上传无效格式的文件。而文件的处理,都是由后台服务器来处理。

  • 相关阅读:
    leetcode 二进制求和 python
    leetcode 66.加一 python3
    django自定义simple_tag和filter
    deepin Gtk-WARNING **: 无法在模块路径中找到主题引擎:“adwaita”
    MySQL ERROR 1698 (28000): Access denied for user 'root'@'localhost'
    deepin 安装scrapy安装出错:fatal error: Python.h 的解决办法
    Bootstrap的$(...).modal is not a function错误
    linux 安装mysql5.6
    linux之主机名bogon问题详解
    linux开启代理转发功能
  • 原文地址:https://www.cnblogs.com/deng-cc/p/6677157.html
Copyright © 2020-2023  润新知