JavaScript笔记(浏览器下-操作表单以及文件)

1 操作表单

用JavaScript操作表单和操作DOM是类似的,因为表单本身也是DOM树。
HTML表单的输入控件主要有以下几种:

  • 单选按钮
  • 多选按钮
  • 文本框
  • 下拉框(<select>
  • 口令框
  • 隐藏文本(<input type="hidden">)

1.1 获取值

假如想要获取一个<input>节点的输入值,首先要取得该节点的引用,然后调用value属性就可以了:

/*
<input type="text" id="name" name="name">
*/

var name = document.getElementById("name");
name.value; //用户输入的值

但有点要注意的是,对于多选或单选按钮,其value本身就绑定在HTML上,而我们实际要想拿到的是用户的输入值,也就是用户有没选用这按钮,所以这时除了调用value属性外还需调用checked属性以确定用户的输入选项,checked属性是一个布尔值。

/*
<input type="radio" value="男" name="sex" id="man">
*/
var man = getElementById("sex");
man.value; //男
man.checked;//true or false

1.2 设置值

设置值和获取值类似,对于textpasswordhidden以及select,直接设置value属性就可以,对于单选框和复选框,要设置checked

1.3 提交表单

提交表单的方式基于HTML结构调用哪个事件:

1.3.1 响应<button>元素的onclick事件

这种方法就是在HTML表单内的按钮元素创建一个onclick事件,使得用户再用鼠标点击时,就马上执行提交表单函数,通过表单节点的submit()方法完成提交。

<script>
    function formSubmit() {
    var form = document.getElementById("test-form");
    form.submit();
}
</script>

<form id="test-form">
    <input tpye="text" name="test">
    <button type="button" onclick="formSubmit()">提交</button>
</form>

这样的做法有个不好的地方就是扰乱了浏览器对form的正常提交,浏览器默认点击<button type="submit">时提交表单,或者用户在最后一个输入框按回车键。

1.3.1 基于<form>元素的onsubmit事件

<form>元素的onsubmit事件内容是return function(),执行的函数返回布尔值,true的话浏览器继续提交表单,false就停止提交表单。

<script>
    function formSubmit() {
    /*
    这里可以对表单信息检验,作出修改
    */
    return true;
}
</script>

<form id="test-form" onsubmit="return formSubmit()">
    <input tpye="text" name="test">
    <button type="submit">提交</button><!-- type="submit" -->
</form>

这里说一下type=hidden的用处,这是一个隐形表单,用户是看不到的。它有一个用法就是,平常输入口令密码时,都会先将口令转化为MD5才提交表单,那么如果此时的口令框会突然从几个*变成32个*因为MD5有32个字符),此时就可以使用hidden

<script>
    function formSubmit() {
    //取得口令
    var ipwd=document.getElementById("input-password");
    var md5ipwd=document.getElementById("md5-password");
    //将口令变成MD5后赋值该hidden
    md5ipwd.value=toMD5(ipwd.value);
}
</script>

<form id="test-form" onsubmit="return formSubmit()">
    <input tpye="password" id="input-password">
    <input tpye="hidden" id="md5-password" name="password">
    <button type="submit">提交</button>
</form>

:此处用的最重要两个知识是hidden用户是无法看到的但还是能对它进行编辑并提交,第二个就是<input>没有name属性是不会被提交的


2 操作文件

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

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

用JavaScript对<input type="file">value赋值是没有任何效果的,此时的value值是文件名,所以JavaScript可以在提交表单时对文件扩展名做检查,以便防止用户上传无效格式的文件

2.1 File API

HTML5的File API提供了FileFileReader两个主要对象,可以获得文件信息并读取文件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>文件api</title>
        <style>
#test-image-preview {
    width:500px;
    height:500px;
    border:1px solid #ff0000;
}
        </style>
        <script src="fileapi.js"></script>
    </head>
    <body>
        <div id="test-file-info"></div>
        <div id="test-image-preview"></div>
        <form action=""><input id="test-image-file" type="file"></form>
        <script>
    'use strict';
    var fileInput = document.getElementById('file'),
        info = document.getElementById('info'),
        preview = document.getElementById('image-preview');
    // 监听 type="file" 的change事件
    fileInput.addEventListener('change', function () {
        // 清除背景图片
        preview.style.backgroundImage = '';
        // 检查文件是否选择
        if(!fileInput.value) {
            info.innerHTML = '<span style="color:red;">没有选择图片</span>';
            return false;
        }

        // 获取file引用,这里是files[0]
        var file = fileInput.files[0];
        console.log(file);
        info.innerHTML = 
                        '文件: ' + file.name + '<br>'
                    +   '大小: ' + file.size + '<br>'
                    +   '修改: ' + file.lastModifiedDate;

        // 判断图片格式
        if(file.type!=='image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
            var p = document.createElement('p');
            p.innerHTML = '<span style="color:red;">不是有效的图片文件!</span>';
            info.appendChild(p);
            return false;
        }

        // 展示图片,创建FileReader对象
        var reader = new FileReader();
        //事先设置一个回调函数
        reader.onload = function (e) {
            var data = e.target.result;// data:image/jpeg;base64,
            preview.style.backgroundImage = 'url("'+data+'")';
        }

        // 以DataURL的形式读取文件
        reader.readAsDataURL(file);
    });

</script>
    </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值