获取form元素
let form = document.getElementById("form1"); //id
// 取得页面中的第一个表单
let firstForm = document.forms[0];
// 取得名字为"form2"的表单
let myForm = document.forms["form2"];
表单是通过用户点击提交按钮或图片按钮的方式提交的
如果表单中有上述任何一个按钮,且焦点在表单中某个控件上,则按回车键也可以提交表单。(textarea 除外),这样就提供了验证表单数据的机会
<input type="submit" value="提交">
<button type="submit">提交button>
<input type="image" src="graphic.gif">
event.preventDefault();
let form = document.getElementById("myForm");
// 提交表单
form.submit();
重置按钮可以使用 type 属性为"reset"的或 元素来创建
<input type="reset" value="重置">
<button type="reset">重置button>
可以像页面中的其他元素一样使用原生DOM方法来访问
let form = document.getElementById("form1");
// 取得表单中的第一个字段
let field1 = form.elements[0];
// 取得表单中所有名为"textbox1"的字段
let field2 = form.elements["textbox1"];
// 取得字段的数量
let fieldCount = form.elements.length;
let form = document.getElementById("myForm");
let field = form.elements[0];
// 修改字段的值
field.value = "修改后的值";
// 检查字段所属的表单
console.log(field.form === form); // true
// 给字段设置焦点
field.focus();
// 禁用字段
field.disabled = true;
// 改变字段的类型(不推荐,但对来说是可能的)
field.type = "checkbox";
// 避免多次提交表单的代码
let form = document.getElementById("myForm");
form.addEventListener("submit", (event) => {
let target = event.target;
// 取得提交按钮
let btn = target.elements["submit-btn"];
// 禁用提交按钮
btn.disabled = true;
});
focus()、 blur()
h5:autofocus()
单行使用<input>元素,多行使用<textarea>元素
<input type="text" size="25" maxlength="50" value="文本">
<textarea rows="25" cols="5">initial valuetextarea>
1、select():全部选中文本框中的文本
let textbox = document.forms[0].elements["textbox1"];
textbox.select();
// 一获取焦点就自动选中所有文本
textbox.addEventListener("focus", (event) => {
event.target.select();
});
2、select事件
let textbox = document.forms[0].elements["textbox1"];
textbox.addEventListener("select", (event) => {
console.log(`文本内容: ${textbox.value}`);
});
3、部分选中文本
setSelectionRange(第一个字符索引,最后一个字符索引)
textbox.value = "Hello world!"
// 选择所有文本
textbox.setSelectionRange(0, textbox.value.length); // "Hello world!"
// 选择前 3 个字符
textbox.setSelectionRange(0, 3); // "Hel"
// 选择第 4~6 个字符
textbox.setSelectionRange(4, 7); // "o w"
1、屏蔽字符
//屏蔽所有
textbox.addEventListener("keypress", (event) => {
event.preventDefault();
});
//只允许输入数字
textbox.addEventListener("keypress", (event) => {
if (!/\d/.test(String.fromCharCode(event.charCode))){
event.preventDefault();
}
2、处理剪贴板
3、自动切换
在当前字段完成时自动切换到下一个字段
// 当用户输入长度与maxlength属性的值一样时,切换到下一个字段输入框
function tabForward(event){
let target = event.target;
if (target.value.length == target.maxLength){
let form = target.form;
for (let i = 0, len = form.elements.length; i < len; i++) {
if (form.elements[i] == target) {
if (form.elements[i+1]) {
form.elements[i+1].focus();
}
return;
}
}
}
}
let inputIds = ["txtTel1", "txtTel2", "txtTel3"];
for (let id of inputIds) {
let textbox = document.getElementById(id);
textbox.addEventListener("keyup", tabForward);
}
let textbox1 = document.getElementById("txtTel1");
let textbox2 = document.getElementById("txtTel2");
let textbox3 = document.getElementById("txtTel3");
1、必填字段(required)
<input type="text" name="username" required>
2、输入类型(email,url)
<input type="email" name="email">
<input type="url" name="homepage">
3、数值范围(“number”、“range”、“datetime”、“datetime-local”、“date”、“month”、“week” 和"time")
<input type="number" min="0" max="100" step="5" name="count">
4、输入模式(pattern:正则表达式)
<input type="text" pattern="\d+" name="count">
5、检测有效性
字段是否有效:checkValidity()
//整个表单是否符合字段约束条件
if(document.forms[0].checkValidity()){
// 表单有效,继续
} else {
// 表单无效
}
字段为什么有效或无效:validity
这个属性是一个对象,包含一系列返回布尔值的属性。
if (input.validity && !input.validity.valid){
if (input.validity.valueMissing){
console.log("请输入值)
} else if (input.validity.typeMismatch){
console.log("Please enter an email address.");
} else {
console.log("Value is invalid.");
}
}
6、禁用验证 (novalidate)
//禁止对表单做任何验证
<form method="post" action="/signup" novalidate>
form>
选择框时使用和元素时创建的
<select name="location" id="selLocation">
// 若选中该项,值为Sunnyvale, CA
<option value="Sunnyvale, CA">Sunnyvaleoption>
// 若选中该项,值为""
<option value="">Chinaoption>
// 若选中该项,值为"Australia"
<option>Australiaoption>
select>
1、 designMode
<!--为iframe源 1.html>
DOCTYPE html>
<html>
<head>
<title>Blank Page for Rich Text Editingtitle>
head>
<body>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<iframe src="./1.html" name="richedit" style="height: 100px; width: 100px">iframe>
body>
<script>
window.addEventListener("load", () => {
frames["richedit"].document.designMode = "on";
});
script>
html>
2、使用 contenteditable
<div class="editable" id="richedit" contenteditable style="height: 300px; width: 300px;border: 1px solid #000;">div>
3、与富文本交互
document.execCommand() 可接收三个参数:要执行的命令、浏览器是否为命令提供用户界面的布尔值(为浏览器兼容,应始为false)、执行命令必需的值
命令 | 值 | 说明 |
---|---|---|
backcolor | 颜色字符串 | 设置文档背景颜色 |
bold | null | 切换选中文本的粗体样式 |
copy | null | 将选中文本复制到剪贴板 |
createlink | URL字符串 | 将当前选中文本转换为指向给定url的链接 |
cut | null | 将选中文本剪切到剪贴板 |
delete | null | 删除当前选中的文本 |
fontname | 字体名 | 将选中文本改为使用指定字体 |
fontsize | 1-7 | 将选中文本改为指定字体大小 |
forecolor | 颜色字符串 | 将选中文本改为指定颜色 |
formatblock | HTML 标签,如h1 | 将选中文本包含在指定的 HTML 标签中 |
ndent | null | 缩进文本 |
inserthorizontalrule | null | 在光标位置插入hr元素 |
insertimage | 图片URL | 在光标位置插入图片 |
insertorderedlist | null | 在光标位置插入ol元素 |
insertparagraph | null | 在光标位置插入p元素 |
insertunorderedlist | null | 在光标位置插入ul元素 |
italic | null | 切换选中文本的斜体样式 |
justifycenter | null | 在光标位置居中文本块 |
justifyleft | null | 在光标位置左对齐文本块 |
outdent | null | 减少缩进 |
paste | null | 在选中文本上粘贴剪贴板内容 |
removeformat | null | 移除包含光标所在位置块的 HTML 标签。这是 formatblock 的 反操作 |
selectall | null | 选中文档中所有文本 |
underline | null | 切换选中文本的下划线样式 |
unlink | null | 移除文本链接。这是 createlink 的反操作 |
下图为很简单的一个富文本编辑器
{{ action.title }}
4、富文本选择(getSelection())
let selection = frames["richedit"].getSelection();
// 取得选中的文本
let selectedText = selection.toString();
// 取得表示选区的范围
let range = selection.getRangeAt(0);
// 高亮选中的文本
let span = frames["richedit"].document.createElement("span");
span.style.backgroundColor = "yellow";
range.surroundContents(span);
5、通过表单提交富文本
//frames
form.addEventListener("submit", (event) => {
let target = event.target;
target.elements["comments"].value =
frames["richedit"].document.body.innerHTML;
});
// contenteditable
orm.addEventListener("submit", (event) => {
let target = event.target;
target.elements["comments"].value =
document.getElementById("richedit").innerHTML;
});