Form表单基础知识和常用兼容方法笔记(二)

接到上一节讲文本框脚本

过滤输入(屏蔽字符和操作剪贴板)

在此之前需要用到两个兼容的方方法

var ev={
//添加事件监听
        addEvent:function(obj,evt,fun){
            if(obj.addEventListener){//for dom
                  obj.addEventListener(evt,fun,false)
            }
            else if(obj.attachEvent){//for ie
                   obj.attachEvent("on"+evt,fun)
                  //obj.attachEvent("on"+evt,function(){fun.call(obj)});//解决IE attachEvent this指向window的问题
            }
            else{obj["on"+evt] = fun}//for other
        },
    //捕获事件
         getEvent:function(){
                  if(window.event){return window.event}
                  else{return ev.getEvent.caller.arguments[0];}
         },
//获取事件源
          getTarget: function(event) {
              return event.target || event.srcElement;  //ie
          },
//跨浏览器取得键盘字符编码 只有在keypress事件下有数值
          getCharCode:function(event){
              if(typeof event.charCode == ‘number‘){
                return event.charCode;//ie opera
              }else{
                return event.keyCode;//返回键码
              }
          },
//阻止默认事件比如a链接跳转
         preventDefault: function(event) {
              if (event.preventDefault) {
                  event.preventDefault();
              } else {
                  event.returnValue = false;  //ie
              }
          },
}

这是base.js 里面的两个方法
 

首先屏蔽字符:电话号码要求只输入数字:

//屏蔽非数字键的输入
    ev.addEvent(,‘keypress‘,function(event){
        ev.getEvent(event);
        var charCode=ev.getCharCode(event);
        // alert(String.fromCharCode(charCode)) 把charCode 转化成键盘上的字符
        if(!/\d/.test(String.fromCharCode(charCode)) && charCode>0){  //键盘上的退格键,删除键,等操作键的charCode 都是0
            ev.preventDefault(event)                  //如果不是数字 则取消默认行为
        }
    })
    ev.addEvent(textFiled,‘keyup‘,function(){
        this.value=this.value.replace(/[^\d]/g,‘‘);  //如果输入的汉字 则替换为空
    })

剪贴板事件

Beforecopy:在发生复制操作前触发

Copy:在发生复制操作时触发

Beforecut:在发生剪切操作前触发

Cut: 在发生剪切操作时触发

Beforepaste: 在发生粘贴操作前触发

Paste: 在发生粘贴操作时触发

这些属性在各个浏览器中访问的标准并不一样,

要访问剪贴板中的数据可以用clipboardData对象,在ie中这个属于window对象在其他浏览器中属于event对象

这个对象包括三个方法:getData(),setData(),clearData();

为了让这些对象方法在各个浏览器中都兼容

再此作如下兼容加入到

//取得剪贴板里的数据 只能在onpaste事件中使用 clipboardData对象是访问剪贴板里的数据 该两个方法添加到base
       getClipboardText:function(event){
          var clipboardData = (event.clipboardData||window.clipboardData)
          return clipboardData.getData(‘text‘);
        },
         //设置剪贴板里的数据
        setClipboardData:function(event){
            if(event.clipboardData){
              return event.clipboardData.setData(‘text/plain‘,value);
            }else if(window.clipboardData){
              return event.clipboardData.setData(‘text‘,value);
            }
         }

//调用

ev.addEvent(textbox,‘paste‘,function(event){


var event=ev.getEvent(event);


//ev.preventDefault(event)            //阻止粘贴


var test = ev.getClipboardText(event))   //返回要被粘贴的text

 if(!/^\d*$/.test(text)){      如果不匹配就组织行为    ev.preventDefault(event);    }
 

自动切换焦点

通常我们输入密钥的时候,输入几个字母或数字 焦点就直接跳转到下个文本框中。

输入电话号码也是一样样。下面我们就这做一个例子:

html:

<input type="text" name=‘tel1‘ id="txtTel1" maxlength="3">
<input type="text" name=‘tel2‘ id="txtTel2" maxlength="3">
 <input type="text" name=‘tel3‘ id="txtTel3" maxlength="4">
//焦点自动切换
function tabFoward(event){
        var event=event||window.event;
         var target=event.target || event.srcElement;
         if(target.value.length==target.maxLength){
             var form=target.form;
             for(var i=0;i<form.elements.length;i++){
                 if(form.elements[i]==target){
                     if(form.elements[i+1]){
                         form.elements[i+1].focus();
                     }
                     return;
                 }
             }
         }
    }

调用:var textbox1=document.getElementById("txtTel1");var textbox2=document.getElementById("txtTel2");var textbox3=document.getElementById("txtTel3");

ev.addEvent(textbox1,‘keyup‘,tabFoward);ev.addEvent(textbox2,‘keyup‘,tabFoward);ev.addEvent(textbox3,‘keyup‘,tabFoward);
时间: 2024-10-08 23:54:32

Form表单基础知识和常用兼容方法笔记(二)的相关文章

Form表单基础知识和常用兼容方法笔记(一)

需要用到的HTML <form id="myForm" name="yourForm" action=""> 姓名:<input type="text" id="textFiled" name="user" value="text"> <p id="box"></p> <input type=&

Form表单基础知识和常用兼容方法笔记(三)

选择框脚本 选择框是通过<select>和<option>元素创建的 一下是方法和属性 add:向控件中插入新的option元素 multiple:是否允许多项选择,布尔值 options: 控件中所有的option元素 selectedIndex:从0开始的选中项的索引,如果没有选中项则为-1,选中项的索引 size:选择框中可见的行数 每个option 又有如下属性: Index:当前选项在options集合中的索引 Label:当前选项的标签 Selected:表示当前选项是

《JAVASCRIPT高级程序设计》表单基础知识和文本框脚本

在HTML中,表单是由<form>元素来表示,在javascript中,表单对应的是HTMLFormElement类型,它具有一些独有的属性和方法: 一.表单基础知识 1.取得表单的方式 var form = document.getElementById("form1");//取得页面中id=form1的元素 var form1 = document.forms[0];//取得页面中的第一个表单 var myform = document.forms["myFo

jQuery实现form表单基于ajax无刷新提交方法详解

本文实例讲述了jQuery实现form表单基于ajax无刷新提交方法.分享给大家供大家参考,具体如下: 首先,新建Login.html页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.o

Django Form表单基础

平时我们写表单要自己写样式,比如我们要写一个注册样式,有如下填写项: 实现代码如下: views.py文件 #!/usr/bin/env python #-*-conding:utf-8:-*- from django.shortcuts import render from django import forms # Create your views here. def user_list(request):     host = request.POST.get('host')     p

asp.net.mvc 中form表单提交控制器的2种方法和控制器接收页面提交数据的4种方法

MVC中表单form是怎样提交? 控制器Controller是怎样接收的? 1..cshtml 页面form提交 (1)普通方式的的提交 (2)特殊方式提交 2.控制器处理表单数据的四种方法 方法1:使用传统的Request请求数据 方法2:Action参数名与表单元素name值一一对应 方法3:从MVC封装的FormCollection容器中读取 方法4:使用实体作为Action参数传入,前提是提交的表单元素名称与实体属性名称一一对应 控制器源码 using MvcStudy.Models;u

HTML表单基础知识

<form>元素定义HTML表单 action属性定义在提交表单时执行的动作 method属性规定在提交表单时所用的HTTP方法(GET或POST) Name属性:如果要正确地被提交,每个输入字段必须设置一个name属性 属性 描述 accept-charset 规定在被提交表单中使用的字符集(默认:页面字符集). action 规定向何处提交表单的地址(URL)(提交页面). autocomplete 规定浏览器应该自动完成表单(默认:开启). enctype 规定被提交数据的编码(默认:u

form表单input file类型的重置

我们知道form表单的dom中有一个reset方法,通过 document.getelemetbyid('yourform').reset()可以重置表单. Jquery对象没有reset方法,所以jquery的重置也是通过dom的reset方法完成,即 $('yourform')[0].reset() 对于form表单的input file类型的元素,在其他主流浏览器中通过form的reset方法完全可以重置 但是IE9以及以下对input file类型,reset无法重置.查了一些资料据说是

Form表单类组件与Map地图组件

笔记内容:Form表单类组件与Map地图组件 笔记日期:2018-02-04 form之switch组件 switch组件是一个开关选择器,wxml示例代码如下: <view class='container'> <view class='switch_text'>switch</view> <switch name='switch1' checked='true' /> <switch name='switch2' /> <switch