DOM - 表单操作

获取表单

获取表单元素

获取表单元素的方式除了Document对象提供的一系列方法外,还有Document对象提供的forms属性。
该属性获取当前HTML页面所有表单的集合,返回HTMLCollection对象,该对象封装了当前HTML页面所有的表单对象。

<body>
<form action="" name="myform">
    <input type="text">
    <input type="submit">
</form>
<script>
    //获取当前HTML页面所有表单元素
    console.log(document.forms);
    //通过name属性值:有些老版本浏览器不支持此方法
    console.log(document.myform);
</script>
</body>

获取表单元素组件

获取表单元素组件除了使用Document对象提供的定位页面元素的方法外,HTMLFormElement对象的elements属性。该属性获得的是一个表单组件集合。

<body>
<form action="#">
    <input type="text">
    <input type="submit">
</form>
<form action="">
    <input type="text">
</form>
<script>
    //获取指定的表单元素,+索引值
    var form = document.forms[0];
    //获取指定表单元素的组件 - 是一个集合
    console.log(form.elements);
</script>
</body>

表单操作

文本内容选择

HTMLInputElement对象和HTMLTextAreaElement对象都提供了select()方法,该方法用于选择当前文本框的所有内容。
获取选择的文本内容

  • selectionStart - 选择文本内容的开始索引值
  • selectionEnd - 选择文本内容的结束索引值
<body>
<form action="#">
    <input type="text" id="HInputE" value="请输入作者名">
    <input type="submit">
</form>
<script>
    //获取HTMLInputElement对象
    var HIE = document.getElementById('HInputE');
    //选择所有的文本内容
    //获取焦点事件(focus) 失去焦点事件(blur)
    HIE.addEventListener('focus',function () {
        //select() - 全选当前输入框中的所有内容
        //HIE.select();
    })
    
        //选取指定的文本内容
    HIE.addEventListener('select',function () {
        /*
           *HTMLInputElement对象
            *selectionStart - 表示用户开始选择的位置的索引值
            * selectionEnd - 表示用户结束选取的位置的下一个位置的索引值
         */
       console.log(HIE.selectionStart,HIE.selectionEnd);
       //获取HIE的value属性
       var value = HIE.getAttribute('value');
       //substring - 字符串截串
       var result = value.substring(HIE.selectionStart,HIE.selectionEnd);
       console.log(result);
    })
</script>
</body>

设置部分文本内容

setSelectionRange()方法 - 用于设置一个获取焦点的文本框中选择指定的文本内容,三个参数

  • selectionStart - 选择文本内容的开始索引值
  • selectionEnd - 选择文本内容的结束索引值
  • selectionDirection - 指明选择的方向,有'forward'、'backward'、'none'3个可选值,分别表示从前先后,从后向前,选择方向未知或不重要。
<body>
<form action="#">
    <input type="text" id="username" value="请输入你的用户名">
    <input type="submit">
</form>
<script>
    var form = document.forms[0];
    var username = form.elements[0];
    username.addEventListener('focus',function(){
        /*
            setSelectionRange()方法
            * 作用 - 设置选择的文本内容
            * 注意
              * 焦点在文本内容的最后面 - select()方法(全选)
              * 焦点在设置文本内容的范围内有效
         */
        username.setSelectionRange(0,5);
    });
</script>
</body>

操作剪切板

事件对象的clipboardData属性得到DataTransfer对象,该对象在IE8之前的浏览器要通过window获取。该对象提供了操作数据的常用方法。

  • setData(in String type,inString) - 为一个给定的类型设置数据
  • getData(inString type) - 根据指定的类型检索数据
  • clearData(in String type) - 删除与给定类型关联的数据
<body>
<form action="#">
    <input type="text" id="username1" value="花亦花来人亦人">
    <input type="text" id="username2">
</form>
<script>
    var username1 = document.getElementById('username1');
    //绑定复制事件
    username1.addEventListener('copy',function (event) {
        /*
           *得到DataTransfer对象
             * setData()方法 - 设置数据内容
        */
        var data = event.clipboardData || window.clipboardData;
        console.log(data);

        console.log('复制操作');

        var value = username1.value;
        var result = value.substring(username1.selectionStart,username1.selectionEnd);
        console.log(result);

        data.setData('text',result);
    });
    //绑定剪切事件
    username1.addEventListener('cut',function () {
        console.log('剪切操作');
    });
    //绑定粘贴事件
    var username2 = document.getElementById('username2');
    username2.addEventListener('paste',function(event){
        //阻止默认行为
        event.preventDefault();
        /*
            得到DataTransfer对象
            * getData()方法 - 获取数据内容
         */
        var data = event.clipboardData || window.clipboardData;
        var result = data.getData('text');
        console.log(result);

        if (result === '用户名') {
            result = '***';
        }
        username2.value = result;
    });
</script>
</body>

下拉列表操作

下拉列表是由<select>和<option>元素创建的,DOM中有对应的对象

clipboard.png

clipboard.png

<body>
<form action="#">
    <select id="city">
        <option id="bj" value="bj">北京</option>
        <option value="nj">南京</option>
        <option value="tj">天津</option>
    </select>
    <select id="city2" multiple size="5">
        <option value="bj">北京</option>
        <option value="nj">南京</option>
        <option value="tj">天津</option>
    </select>
</form>
<script>
    // HTMLSelectElement对象
    var city = document.getElementById('city');
    // 属性
    console.log(city.length);//3
    console.log(city.options);
    console.log(city.selectedIndex);// 被选中<option>的索引值

    var city2 = document.getElementById('city2');
    // size属性默认值为 0
    console.log(city2.size);//5

    console.log(city2.item(1));//南京
    city2.remove(2);

    var bj = document.getElementById('bj');
    console.log(bj.index);//0
    console.log(bj.selected);//true
    console.log(bj.text);//北京
    console.log(bj.value);//bj

</script>
</body>

表单验证

clipboard.png
验证表单的方法

  • chenckValidity():如果元素不存在验证问题,返回true,否则返回false
  • setCuetomValidity(message):为元素添加一个自定义的错误,如果设定了自定义错误信息,则该元素被认为是无效的,并显示指定的错误。
<body>
<form action="#">
    <!--
        HTML表单组件元素的验证属性
        * required - 验证当前元素不能为空
        * pattern - 验证当前元素输入的内容是否与指定的正则表达式匹配
     -->
    <input type="text" id="username" required pattern="^[0-9a-zA-Z]{6,12}$">
    <input type="submit">
</form>
<script>
    var username = document.getElementById('username');
    /*
        表单组件元素对应的对象提供了validity属性
        * 得到ValidityState对象 - 提供了一系列的验证属性
     */
    console.log(username.validity);

    // console.log(username.validity.valueMissing);

    username.addEventListener('blur',function(){
        /*
            valueMissing属性
            * 作用 - 配合元素中required属性来使用
            * 结果
              * true - 表示当前元素内容为空(错误的)
              * false - 表示当前元素内容不为空(正确的)
         */
        if (username.validity.valueMissing) {
            /*
                setCustomValidity(message)方法
                * 作用 - 替换浏览器默认的错误提示信息
                * 注意 - 如果输入正确,必须将错误提示信息设置为空
             */
            username.setCustomValidity('用户名不能为空');
        } else {
            username.setCustomValidity('');
        }
        /*
            patternMismatch属性
            * 作用 - 配合元素中pattern属性来使用
         */
        if (username.validity.patternMismatch) {
            username.setCustomValidity('用户名格式错误');
        } else {
            username.setCustomValidity('');
        }
        /*
            * rangeOverflow - 配合元素中max属性来使用
            * rangeUnderflow - 配合元素中min属性来使用
            * stepMismatch - 配合元素中step属性来使用
            * tooLong - 配合元素中maxLength属性来使用
            * tooShort - 配合元素中minLength属性来使用
            * typeMismatch - 配合<input type="url">等元素来使用
            * customError - 配合setCustomValidity()方法来使用
            * valid - 验证当前元素是否验证通过
              * true - 表示当前元素验证通过
              * false - 表示当前元素验证通过
         */
    });

</script>
</body>

submit()方法

submit()方法用于提交表单,使用该方法允许表单内使用任意一普通按钮即可。

<body>
<form action="#">
    <input type="text">
    <input type="button" value="提交" id="bnt">
</form>
<script>
    var bnt = document.getElementById('bnt');
    bnt.addEventListener('click',function () {
        var form = document.forms[0];
        form.submit();
    })
</script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值