JavaScript第十四章节 表 单 脚 本

表单的基础知识

  • acceptCharset:服务器能够处理的字符集;等价于 HTML 中的 accept-charset 特性。
  • action:接受请求的 URL;等价于 HTML 中的 action 特性。
  • elements:表单中所有控件的集合(HTMLCollection)。
  • enctype:请求的编码类型;等价于 HTML 中的 enctype 特性。
  • length:表单中控件的数量。
  • method:要发送的 HTTP 请求类型,通常是"get"或"post";等价于 HTML 的 method 特性。
  • name:表单的名称;等价于 HTML 的 name 特性。
  • reset():将所有表单域重置为默认值。
  • submit():提交表单。
  • target:用于发送请求和接收响应的窗口名称;等价于 HTML 的 target 特性。

提交表单

  • 把type设置为sumbit即可
  • 图像按钮把input的type设置为image
  • form.submit()

重置表单

  • 同提交表单,把type设置为reset即可
  • form.reset()

共有的表单字段属性

  • disabled:布尔值,表示当前字段是否被禁用。
  • form:指向当前字段所属表单的指针;只读。
  • name:当前字段的名称。
  • readOnly:布尔值,表示当前字段是否只读。
  • tabIndex:表示当前字段的切换(tab)序号。
  • type:当前字段的类型,如"checkbox"、"radio",等等。
  • value:当前字段将被提交给服务器的值。对文件字段来说,这个属性是只读的,包含着文件
    在计算机中的路径。

共有表单的方法

  • focus():激活表单
  • blur():失去焦点

共有表单字段事件

  • blur:当前字段市区焦点时触发
  • change:对于<input>和<textarea>元素,在它们失去焦点且 value 值改变时触发;对于
    <select>元素,在其选项改变时触发。
  • focus:当前字段获得焦点时触发。

选择文本

  • input和textarea的select()
  • setSelectionRange():这个方法接收两个参数:要选择的第一个字符的索引和要选择的最后一个字符之后的字符的索引
    (类似于 substring()方法的两个参数)。

过滤输入

  • 屏蔽字符
    • keypress:可以通过此事件实现屏蔽字符
  EventUtil.addHandler(textbox, "keypress", function(event){
   event = EventUtil.getEvent(event);
   EventUtil.preventDefault(event);
  }); 

操作剪贴板

  • beforecopy:在发生复制操作前触发。
  • copy:在发生复制操作时触发。
  • beforecut:在发生剪切操作前触发。
  • cut:在发生剪切操作时触发。
  • beforepaste:在发生粘贴操作前触发。
  • paste:在发生粘贴操作时触发。

HTML5 约束验证API

  • 必填字段:required
  • 其他输入类型,对type赋值
  • 数值范围:step,max,min
  • 输入模式:pattern,匹配正则
  • 检测有效性:checkValidity()
  • 禁用验证:novalidate

选择框脚本

选择框是通过<select>和<option>元素创建的。为了方便与这个控件交互,除了所有表单字段共

有的属性和方法外,HTMLSelectElement 类型还提供了下列属性和方法。

  • add(newOption,relOption):向控件中插入新<option>元素,其位置在相关项(relOption)
    之前。
  • multiple:布尔值,表示是否允许多项选择;等价于 HTML 中的 multiple 特性。
  • options:控件中所有<option>元素的 HTMLCollection。
  • remove(index):移除给定位置的选项。
  • selectedIndex:基于 0 的选中项的索引,如果没有选中项,则值为-1。对于支持多选的控件,
    只保存选中项中第一项的索引。
  • size:选择框中可见的行数;等价于 HTML 中的 size 特性。

在 DOM 中,每个<option>元素都有一个 HTMLOptionElement 对象表示。为便于访问数据,
HTMLOptionElement 对象添加了下列属性:

  • index:当前选项在 options 集合中的索引。
  • label:当前选项的标签;等价于 HTML 中的 label 特性。
  • selected:布尔值,表示当前选项是否被选中。将这个属性设置为 true 可以选中当前选项。
  • text:选项的文本。
  • value:选项的值(等价于 HTML 中的 value 特性)。

选择选项:对于只允许选择一项的选择框,访问选中项的最简单方式,就是使用选择框的 selectedIndex 属

添加选项:可以使用 JavaScript 动态创建选项,并将它们添加到选择框中。
移除选项:

  • 首先,可以使用 DOM 的 removeChild()方法
  • 可以使用选择框的 remove()方法

移动和重排选项

  • appendChild()
  • insertBefore()

表单序列化:浏览器是怎样将数据发送给服务器的。

  • 对表单字段的名称和值进行 URL 编码,使用和号(&)分隔
  • 不发送禁用的表单字段。
  • 只发送勾选的复选框和单选按钮。
  • 不发送 type 为"reset"和"button"的按钮
  • 多选选择框中的每个选中的值单独一个条目。
  • 在单击提交按钮提交表单的情况下,也会发送提交按钮;否则,不发送提交按钮。也包括 type
    为"image"的<input>元素。
  • <select>元素的值,就是选中的<option>元素的 value 特性的值。如果<option>元素没有
    value 特性,则是<option>元素的文本值

富文本编辑

  • 是在页面中嵌入一个包含空 HTML 页面的 iframe。通过设置 designMode 属性,这个空白
    的 HTML 页面可以被编辑,而编辑对象则是该页面<body>元素的 HTML 代码。designMode 属性有两
    个可能的值:"off"(默认值)和"on"。在设置为"on"时,整个文档都会变得可以编辑(显示插入符
    号),然后就可以像使用字处理软件一样,通过键盘将文本内容加粗、变成斜体,等等。
  • 使用contenteditable属性

操作富文本:与富文本编辑器交互的主要方式,就是使用 document.execCommand()。这个方法可以对文档执
行预定义的命令,而且可以应用大多数格式。可以为 document.execCommand()方法传递 3 个参数:
要执行的命令名称、表示浏览器是否应该为当前命令提供用户界面的一个布尔值和执行命令必须的一个
值(如果不需要值,则传递 null)。为了确保跨浏览器的兼容性,第二个参数应该始终设置为 false,
因为 Firefox 会在该参数为 true 时抛出错误。

不同浏览器支持的预定义命令也不一样。下表列出了那些被支持最多的命令。


  • queryCommandEnabled(),可以用它来检
    测是否可以针对当前选择的文本,或者当前插入字符所在位置执行某个命令。这个方法接收一个参数,即要
    检测的命令。如果当前编辑区域允许执行传入的命令,这个方法返回 true,否则返回 false。
  • queryCommandValue(),用于取得执行命令时传入的值(即前面例子中传给
    document.execCommand()的第三个参数)。例如,在对一段文本应用"fontsize"命令时如果传入了
    7,那么下面的代码就会返回"7"

富文本选区

在富文本编辑器中,使用框架(iframe)的 getSelection()方法,可以确定实际选择的文本。
这个方法是 window 对象和 document 对象的属性,调用它会返回一个表示当前选择文本的 Selection
对象。每个 Selection 对象都有下列属性。

  • anchorNode:选区起点所在的节点。
  • anchorOffset:在到达选区起点位置之前跳过的 anchorNode 中的字符数量
  • focusNode:选区终点所在的节点。
  • focusOffset:focusNode 中包含在选区之内的字符数量。
  • isCollapsed:布尔值,表示选区的起点和终点是否重合
  • rangeCount:选区中包含的 DOM 范围的数量。
  • addRange(range):将指定的 DOM 范围添加到选区中。
  • collapse(node, offset):将选区折叠到指定节点中的相应的文本偏移位置。
  • collapseToEnd():将选区折叠到终点位置。
  • collapseToStart():将选区折叠到起点位置。
  • containsNode(node):确定指定的节点是否包含在选区中。
  • deleteFromDocument():从文档中删除选区中的文本,与document.execCommand("delete",
    false, null)命令的结果相同。
  • extend(node, offset):通过将 focusNode 和 focusOffset 移动到指定的值来扩展选区。
  • getRangeAt(index):返回索引对应的选区中的 DOM 范围。
  • removeAllRanges():从选区中移除所有 DOM 范围。实际上,这样会移除选区,因为选区中
    至少要有一个范围。
  • reomveRange(range):从选区中移除指定的 DOM 范围。
  • selectAllChildren(node):清除选区并选择指定节点的所有子节点。
  • toString():返回选区所包含的文本内容。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容