zoukankan      html  css  js  c++  java
  • 表单脚本

    ——《JavaScript高级程序设计》Chapter14学习笔记

    1.表单基础

    1.取得表单:document.forms

    var form1=document.forms[0];
    var form2=document.forms["form's name"];
    

    2.提交表单:

    三种提交按钮

    (1)<input type="submit" value="Submit">
    (2)<button type="submit">Submit</button>
    (3)<input type="image" src="xx.gif">
    

    只要表单中存在上述任何一种按钮,在相应表单控件拥有焦点的情况下,按回车就可以提交表单。

    submit事件

    以上述按钮方式提交表单时,浏览器会在请求发送给服务器之前触发submit事件。这样就有机会验证表单是否提交。

    以下代码可阻止表单提交

    var form=document.forms[0];
    EventUtil.addHandler(form,"submit",function(event){
        event=EventUtil.getEvent(event);
        Event.preventDefault(event);
    })
    

    submit()方法提交表单

    • 该方式提交的表单无需表单包含提交按钮。

    • 该方式提交表单不会触发submit事件

      var form=document.forms[0];
      form.submit();

    提交表单的问题

    用户可能会重复提交表单,带来问题。

    解决办法是:第一次提交后就禁用提交按钮。

    3.重置表单

    两种重置按钮

    <input type="reset" value="Reset">
    <button type="reset">Reset</button>
    

    初始值为空的字段就恢复为空;带有默认值的字段就恢复为默认值。

    reset事件

    单击重置按钮会触发reset事件。可利用这个机会取消重置操作。

    取消重置操作按钮:

    var form=document.forms[0];
    EventUtil.addHandler(form,"reset",function(event){
        event=EventUtil.getEvent(event);
        EventUtil.preventDefault(event);
    })
    

    reset()方法

    • 也可通过JS的reset方法重置表单。

    • 和submit()方法不会触发submit事件不同,该方法也会触发reset事件

      form.reset()

    4.表单字段

    (1)取得表单字段

    form.elements集合包含着表单中的所有字段,如input、textarea、button、fieldset。

    var field1=form.elements[0];//取得表单中第一个字段
    var field2=form.elements["field1"]//取得名为field1的字段
    var count=form.elements.length;//取得表单中包含的字段数量
    

    (2)共有的表单字段属性

    • disabled:布尔值,表示当前字段是否被禁用
    • form:指向当前字段所属表单,只读
    • name:当前字段的名称
    • type:当前字段类型,如“checkbox","radio"等
    • value:当前字段提交给服务器的值

    除form外,以上属性都可修改。

    (3)动态修改字段属性和方法

    field1.value="Another value";//修改value属性
    console.log(field1.form==form);//检查字段form属性
    field1.focus();//把焦点设置到当前字段
    field1.disabled=true;//禁用当前字段
    

    动态操作表单有用实例:避免重复提交表单

    EventUtil.addHandler(form,"submit",function(event){
        event=EventUtil.getEvent(event);
        var target=EventUtil.getTarget(event);
        
        var btn=target.elements["submit-btn"];//取得提交按钮
        btn.disabled=true;//禁用它
    });
    

    注意:只能用侦听submit事件来禁用提交按钮,不能用click事件,因为click事件和提交行为之间有时差。对于一先触发click事件再提交的浏览器,如果在提交之前禁用按钮,则永远都不会提交表单。

    (4)共有的表单字段方法:focus()和blur()

    eg:页面加载后自动聚焦于第一个字段
    EventUtil.addHandler(window,"load",function(event){
    	if (element.autofocus!==true) {//如果表单字段的html中已经有
         document.forms[0].elements[0].focus();
    }
    

    })
    以上代码在这些情况下会出错:

    • 第一个字段为input且其type="hidden"
    • 第一个字段的CSS的display:none
    • 第一个字段的CSS的visibility:hidden
    H5新增属性:autofocus

    支持autofocus的有Firefox4+、Safari5+、Chrome和Opera9.6

    (5)共有的表单字段事件:blur、change、focus

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

    利用blur和focus事件可改变用户界面,利用change事件可以验证用户在字段中输入的数据。eg:

    var textbox=document.forms[0].elements[0];
    
    EventUtil.addHandler(textbox,"focus",function(event){
        event=EventUtil.getEvent(event);
        var target=EventUtil.getTarget(event);
        
        if (target.style.backgroundColor!="red") {
            target.style.backgroundColor="yellow";
        }
    });
    
    EventUtil.addHandler(textbox,"blur",function(event){
        event=EventUtil.getEvent(event);
        var target=EventUtil.getTarget(event);
        
        if (/[^d]/.test(target.value)) {//如果含有非数值字符,则该字段在失去焦点时背景颜色变为红色
            target.style.setProperty("background-color","red");
        }
        else{
            target.style.removeProperty("background-color");
        }
    })
    
    EventUtil.addHandler(textbox,"change",function(event){
        event=EventUtil.getEvent(event);
        var target=EventUtil.getTarget(event);
        
        if (/[^d]/.test(target.value)) {//如果输入了含有非数值字符,则该字段景颜色变为红色
            target.style.setProperty("background-color","red");
        }
        else{
            target.style.removeProperty("background-color");
        }
    })
  • 相关阅读:
    【2021-01-01】爱自己等于爱家人
    【2020-12-31】2020的收获与2021的挑战
    【2020-12-30】说别人辛苦,其实是自己辛苦
    【一句日历】2021年1月
    最大子序和
    判断子序列
    下载安装 ethereal
    6812. 【2020.10.05提高组模拟】战争
    6816. 【2020.10.06提高组模拟】随机的排列
    python 版本及pip安装相关
  • 原文地址:https://www.cnblogs.com/Bonnie3449/p/5496160.html
Copyright © 2011-2022 走看看