副队长JavaScript教程(56)-DOM之表单操作

点此查看 所有教程、项目、源码导航

文章目录

  • [1. 背景](#1. 背景)
  • [2. 文本输入框 input:text、textarea](#2. 文本输入框 input:text、textarea)
  • [3. 单选框 radio](#3. 单选框 radio)
  • [4. 复选框 checkbox](#4. 复选框 checkbox)
  • [5. 下拉选择框 select](#5. 下拉选择框 select)
  • [6. 禁用表单元素 disabled](#6. 禁用表单元素 disabled)
  • [7. 基础表单验证:非空、长度、邮箱格式](#7. 基础表单验证:非空、长度、邮箱格式)
  • [8. 小结](#8. 小结)

1. 背景

前面我们学习了 DOM 节点增删改查,能够动态创建页面元素。

网页中经常会遇到表单,比如登录框、搜索框、单选、多选、下拉选择。表单是网页和用户交互非常重要的载体。

用户输入的内容不一定是符合要求的,所以我们还需要做表单验证,判断输入是否合法。

本篇我们专门学习表单元素的 DOM 操作,读取用户输入、设置默认值、判断选中状态,同时学习基础的表单验证。

2. 文本输入框 input:text、textarea

普通文本框、多行文本框,读写内容依靠 value 属性,这是表单最核心的属性。

语法:

js 复制代码
// 获取输入的值
var 内容 = 表单元素.value;
// 设置输入框的值
表单元素.value = "要填充的内容";

示例 HTML:

html 复制代码
<input type="text" id="username" placeholder="请输入用户名">
<textarea id="desc"></textarea>

示例 JS 代码:

js 复制代码
var username = document.querySelector("#username");
var desc = document.querySelector("#desc");

// 读取输入内容
console.log(username.value);
console.log(desc.value);

// 给输入框设置默认文字
username.value = "张三";
desc.value = "一段描述文字";

重点说明:

  1. 不要用 innerText、innerHTML 去读写输入框内容,不生效;
  2. value 拿到的是字符串,如果用户什么都没输入,拿到空字符串 "";
  3. placeholder 只是提示文字,不会进入 value,用户输入后才会有值。

3. 单选框 radio

单选框同一组只能选一个,通过 checked 属性判断是否选中,它是布尔类型 true / false。

示例 HTML:

html 复制代码
<input type="radio" name="sex" value="male" id="male">男
<input type="radio" name="sex" value="female" id="female">女

示例 JS 代码:

js 复制代码
var male = document.querySelector("#male");
var female = document.querySelector("#female");

console.log(male.checked);
// 设置选中
male.checked = true;

重点说明:

  1. name 相同的单选框会归为一组;
  2. checked 是布尔值,不是字符串;
  3. value 用来保存这个选项代表的数据,选中时我们读取 value。

4. 复选框 checkbox

复选框可以多选,同样使用 checked 判断选中状态。

示例 HTML:

html 复制代码
<input type="checkbox" value="basketball" id="basket">篮球
<input type="checkbox" value="music" id="music">音乐

示例 JS 代码:

js 复制代码
var basket = document.querySelector("#basket");
var music = document.querySelector("#music");

console.log(basket.checked);
// 设置选中
basket.checked = true;
// 取消选中
music.checked = false;

重点说明:

  1. 复选框互相独立,需要单独判断每一个的 checked;
  2. 开发中经常循环一组复选框,收集所有选中项的 value。

5. 下拉选择框 select

下拉框 select,它的子元素是 option。

select 有 value,直接拿到当前选中 option 的 value。

示例 HTML:

html 复制代码
<select id="city">
    <option value="beijing">北京</option>
    <option value="shanghai">上海</option>
    <option value="guangzhou">广州</option>
</select>

示例 JS 代码:

js 复制代码
var city = document.querySelector("#city");
// 获取选中的值
console.log(city.value);
// 代码设置选中
city.value = "shanghai";

重点说明:

  1. 给 select 的 value 赋值,会自动选中对应 value 的 option;
  2. 如果 option 没有写 value,会取 option 内部的文本。

6. 禁用表单元素 disabled

所有表单元素都支持 disabled 属性,布尔类型,设置为 true 之后元素无法点击、不能输入。

js 复制代码
var username = document.querySelector("#username");
// 禁用
username.disabled = true;
// 启用
username.disabled = false;

7. 基础表单验证:非空、长度、邮箱格式

拿到用户输入之后,我们需要校验内容是否符合规则,这里把验证逻辑封装成一个函数,包含三种最常用的验证:非空校验、长度校验。

我们使用 onclick 点击事件,这个事件机制马上下一篇会讲到,此处简单理解,点击button按钮会触发checkForm()函数执行即可。

示例 HTML:

html 复制代码
<input type="text" id="username" placeholder="用户名">
<button onclick="checkForm()">提交校验</button>

示例 JS 代码:

js 复制代码
// 表单验证函数
function checkForm() {
    var username = document.querySelector("#username");
    var nameVal = username.value.trim(); // trim() 去掉首尾空格
    // 1. 非空验证
    if (nameVal === "") {
        alert("用户名不能为空");
        return;
    }
    // 2. 长度验证:用户名长度 3~10 位
    if (nameVal.length < 3 || nameVal.length > 10) {
        alert("用户名长度必须在3~10位之间");
        return;
    }
    alert("全部验证通过!");
}

重点说明:

  1. trim() 用来去除输入内容首尾的空格,防止用户只输入空格蒙混过关;
  2. length 属性可以获取字符串长度;
  3. 校验不通过使用 return 直接终止函数里面后续代码执行。

8. 小结

  1. 文本框、textarea、select 使用 value 读写内容;
  2. radio、checkbox 使用 checked 判断选中状态,布尔值;
  3. disabled 控制表单是否禁用;
  4. 不要用 innerText 操作输入框内容;
  5. 常用表单验证封装在函数内:非空判断、长度判断、邮箱正则校验。
相关推荐
Dxy12393102162 小时前
JS AES加密详解
开发语言·javascript·ecmascript
FRing032 小时前
JavaScript入门到精通三十三(异常处理、call方法、apply方法、bind方法、防抖、节流)
开发语言·前端·javascript
jktantan3 小时前
(二)Vue 3 的 attrs 不是响应式:el-form 扩展属性同步的三种方案
前端·javascript·vue.js·element-plus
echome8884 小时前
JavaScript async/await 错误处理:别让 Promise 静默失败
开发语言·前端·javascript·promise
#麻辣小龙虾#5 小时前
网页布局css中flex+margin的组合布局技巧
开发语言·前端·javascript
Hello.Reader6 小时前
Three.js / Cesium 卡顿怎么办?把三维渲染搬到 GPU 服务器
服务器·开发语言·javascript
chi11306 小时前
【无标题】
前端·javascript·python
萝卜兔0086 小时前
PIKACHU_UnsafeFileUpload
javascript·php
程序员大阳18 小时前
副队长JavaScript教程(50)-DOM:网页开发的起点
javascript·dom·es·节点·概念·document·关系