submit相关

当使用 submit 按钮或者 image  或者button type="submit"   来提交表单时,会触发 submit 事件,但是直接javascript调用submit() 提交的话, 不会触发submit()

而使用javascript调用 reset() 的话则会继续触发 reset() 事件
点击submit时,有些浏览器先触发click事件,有些浏览器先触发submit事件,因此不能依赖
 
防止重复提交表单
1、<input type=”button” value=”Submit”  onclick=”this.disabled=true; this.form.submit()” />
不使用 submit 按钮因为它会在提交之前就被禁止,所以表单不会被提交
2、另外一种方法是监听onsubmit事件,发现重复提交请求就取消掉
 
访问表单字段
表单里面的控件元素同时属于表单集合,属于表单的属性,可以使用索引和name来访问:
var form = document.getElementById(“form1”);
var field1 = form.elements[0];                           //获得表单里的第一个元素
var field2 = form.elements[”textbox1”];                     //获得name为textbox的元素,如果多个元素name一致,那么将返回HTMLcollection集合
注:form[0]和form["name"]是为了兼容旧的浏览器,如果可以应该使用form.element[0]的形式
 
输入框
输入框(text或者textarea)当里面的文字在获取焦点以后发生了变化,当失去焦点以后会触发change事件(因此可以拿来验证用户的输入是否正确),如果同时指定了 blur()  和  change()  , 哪个先触发因浏览器而会不同。同时修改输入框值的时候直接使用element.value更好,而不推荐使用setAttribute()
输入框有一个select方法,可以用来选中里面的文字,同时也提供了select事件,但是无法知道哪些内容被选中,HTML5提供了两个属性selectionEnd,selectionStart,可以获取选择开始和结束的位置,再配合切割就可以获取啦,对于旧的ie浏览器可以使用document.selection(包含了文档中所有被选中的值)来模拟:
function getSelectedText(textbox) {
    if (typeof textbox.selectionStart == “number”) {
        return textbox.value.substring(textbox.selectionStart, textbox.selectionEnd); 
    } else if (document.selection) {
        return document.selection.createRange().text;
    }
}
同时HTML5也提供了一个部分文字选择的方法:setSelectionRange
textbox.value = “Hello world!”
textbox.setSelectionRange(0, 3);       //”Hel”
 
keypress 事件只有当代表字符的按键按下时才会触发,禁用默认行为就能阻止输入任何字符,但是有些浏览器按上下左右之类的也会触发,还好在火狐所有触发keypress的非字符按键字符为0,Safari 3 以前的则返回字符8,所以不要阻止10一下的:
textbox.addEventListener( “keypress”, function(event){
    var target = event.target;
    var charCode = EventUtil.getCharCode(event);
    if (!/\d/.test(String.fromCharCode(charCode)) && charCode > 9){                   //String.fromCharCode 将ascii码转成字符串
        EventUtil.preventDefault(event);
    }
});
onkeydown 只要键盘按键被按下就会触发
 
an empty string is always considered to be present in any string
 
当一个表单控件获得焦点的时候,按下enter按钮,就会提交表单。如果没有submit按钮的话,则不会提交。还有一个例外的就是textarea,它会换行咯
 
可以为text输入框指定pattern属性,该属性接收正则表达式,只有匹配的内容才能输入,^代表开头,$代表结尾
var pattern = document.forms[0].elements[“count”].pattern;
 
 
change事件,在不同的表单控件上触发的时间也有差异,对于input和textarea,当他们失去焦点并且里面的值有变化就会触发。对于select元素,只要改变了选项就会触发,不用等到失去焦点。
 
 
使用checkValidity()可以用来检测输入框输入的数据是否符合预定条件,也可以用在表单上form.checkValidity(),如果每个输入框都符合条件才返回true。检测出错误以后可以使用validity对象定位错误类型,该对象有很多错误类型属性,例如required没有填写数据的话↓
badInput: false
customError: false
patternMismatch: false
rangeOverflow: false
rangeUnderflow: false
stepMismatch: false
tooLong: false
typeMismatch: false
valid: false
valueMissing: true
 
但是可以设置关闭检测直接<form novalidate>,这样的话会忽略对该表格内输入内容的检测,也可以用document.forms[0].noValidate = true;设置。可以在submit按钮上设置<input type=”submit” formnovalidate name=”btnNoValidate” value=”Non-validating Submit”>那么按这个按钮提交就不会检测了。
 
通常只有表单元素才可以设置focus,但是可以通过把元素的tabIndex设为-1来让任意元素都可以focus
 
textbox有一个select()方法,用来选中里面的文字,同时也提供了select事件,当textbox里面的文字被选中时触发
 
<input> 和 <button>可以动态改变type属性,但 <select> 的type属性是只读的
 
在隐藏的表单元素上调用focus方法会报错,不管是hidden类型还是用css隐藏的。
 
function serialize(form) { 
var parts = [],
field = null,
i,
len,
j,
optLen,
option,
optValue;
 
for (i=0, len=form.elements.length; i < len; i++){
field = form.elements[i];
switch(field.type){
case ”select-one”:
case ”select-multiple”:
if (field.name.length){
for (j=0, optLen = field.options.length; j < optLen; j++){
option = field.options[j];
if (option.selected){
optValue = ””;
if (option.hasAttribute){
optValue = (option.hasAttribute(”value”) ? 
option.value : option.text);
} else {
optValue = (option.attributes[”value”].specified ? 
option.value : option.text);
}
parts.push(encodeURIComponent(field.name) + ”=” + 
encodeURIComponent(optValue));
}
}
}
break;
case undefined: //fieldset
case ”file”: //file input
case ”submit”: //submit button
case ”reset”: //reset button
case ”button”: //custom button
break;
case ”radio”: //radio button
case ”checkbox”: //checkbox
if (!field.checked){
break;
}
/* falls through */
default:
//don’t include form fields without names
if (field.name.length){
parts.push(encodeURIComponent(field.name) + ”=” + 
encodeURIComponent(field.value));
}
}
return parts.join(”&”);
}

form 表单处理的更多相关文章

  1. form表单验证-Javascript

    Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...

  2. Form 表单提交参数

    今天因为要额外提交参数数组性的参数给form传到后台而苦恼了半天,结果发现,只需要在form表单对应的字段html空间中定义name = 后台参数名 的属性就ok了. 后台本来是只有模型参数的,但是后 ...

  3. form表单 ----在路上(15)

    form 表单就是将用户的信息提交到服务器,服务器会将信息存储活着根据信息查询数据进行增删改查,再将其返回给用户. 基本格式: <form action="" method ...

  4. form表单的字符串进行utf-8编码

    <form>表单有assept-charset属性.该属性规定字符的编码方式,默认是"unknown",与文档的字符集相同. 该属性除了Internet explore ...

  5. 细说 Form (表单)

    细说 Form (表单) Form(表单)对于每个WEB开发人员来说,应该是再熟悉不过的东西了,可它却是页面与WEB服务器交互过程中最重要的信息来源. 虽然Asp.net WebForms框架为了帮助 ...

  6. 通过form表单的形式下载文件。

    在项目中遇到问题,要求动态拼接uri下载文件.但是由于项目的安全拦截导致window.location.href 和 window.open等新建窗口的方法都不行. 无意间百度到了通过form表单来下 ...

  7. form 表单跨域提交

    <!DOCTYPE html><html> <head> <title>form 表单上传文件</title> <script src ...

  8. form表单的属性标签

    form表单的常用标签 表单: <form id="" name="" method="post/get" action=" ...

  9. form表单的属性标签和练习

    form表单的标签 做一个如下图的form表单: 我们的代码如下: <body leftmargin="400px" topmargin="200px"& ...

  10. Django基础,Day5 - form表单投票详解

    投票URL polls/urls.py: # ex: /polls/5/vote/ url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, ...

随机推荐

  1. jquery模板下载网站

    jquery模板下载网站 http://www.jqshare.com/

  2. [Tjoi2013]循环格

    [Tjoi2013]循环格 2014年3月18日1,7500 Description Input 第一行两个整数R,C.表示行和列,接下来R行,每行C个字符LRUD,表示左右上下. Output 一个 ...

  3. JAVA编码互转(application/x-www-form-urlencoded)

    本质上来说,java.net.UrlEncoder适用于将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法 时 ,使用 但!一般情况 ...

  4. Python实战之文件操作的详细简单练习

    ['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__' ...

  5. 阿里云AliYun表格存储(Table Store)相关案例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. win10 uwp iot

    这篇文章主要译: https://msdn.microsoft.com/magazine/mt694090 有很多都是胡说,随便喷,但我不会理. https://blogs.msdn.microsof ...

  7. 微信小程序城市定位(借助百度地图API判断城市)

    概述 微信小程序提供一些API(地址)用于获取当前用户的地理位置等信息,但无论是wx.getLocation,还是wx.chooseLocation均没有单独的字段表示国家与城市信息,仅有经纬度信息. ...

  8. Python学习笔记(五)

    Python学习笔记(五): 文件操作 另一种文件打开方式-with 作业-三级菜单高大上版 1. 知识点 能调用方法的一定是对象 涉及文件的三个过程:打开-操作-关闭 python3中一个汉字就是一 ...

  9. Xuan.UWP.Framework

    开篇博客,以前总是懒,不喜欢写博客什么,其实都是给自己找理由,从今天开始有空就写写博客.新手博客,写得不好轻喷,哈哈! 开始正题,微软移动平台,从WP7开始,经历了WP8,然后WP8.1,到目前得Wi ...

  10. 引入js文件,ajax不执行操作

    今天写了一个页面,在页面中写的可以执行,但是放到js里面,引入到页面,ajax却不执行了,仔细一看原来是路径的原因 ${pageContext.request.contextPath} 为获取项目名称 ...