jQuery梳理之表单
2016-06-27 00:15
387 查看
前言
本文内容摘自《jQuery中文网》,主要是对平时经常操作的表单的jQuery函数进行梳理正文
.blur()
为 "blur" 事件绑定一个处理函数,或者触发元素上的 "blur" 事件(注:此事件不支持冒泡)。
.prop()
需要和attr做下区别,$("select option:first").prop("selected",true)。而不用attr("selected",true)
.change()
为JavaScript 的 "change" 事件绑定一个处理函数,或者触发元素上的 "change" 事件。
.focus()
为 JavaScript 的 "focus" 事件绑定一个处理函数,或者触发元素上的 "focus" 事件。
.focusin()
focusin 事件会在元素(或者其内部的任何元素)获得焦点时触发。这跟 focus 事件的显著区别在于,它可以在父元素上检测子元素获得焦点的情况(换而言之,它支持事件冒泡)。
.focusout()
focusout 事件会在元素(或者其内部的任何元素)失去焦点时触发。这跟 blur 事件的显著区别在于,它可以在父元素上检测子元素失去焦点的情况(换而言之,它支持事件冒泡)。
.select()
当用户在一个元素中进行文本选择时,这个元素上的select事件就会被触发。此事件只能用在<input type="text"> 和<textarea>。
.submit()
当用户试图提交表单时,就会在这个表单元素上触发submit事件。它只能绑定在<form>元素上。以下几种情况会导致表单被提交:用户点击了<input type="submit">, <input type="image">, 或者 <button type="submit">,或者当某些表单元素获取焦点时,敲击Enter(回车键),都可以提交。
.val()
获取匹配的元素集合中第一个元素的当前值。设置匹配的元素集合中每个元素的值。note:这里需要和text() / html() 做区别。 val对应value 属性
下面的函数有必要好好研究一下 |
jQuery.param()
将对象序列化成字符串,key=value&key=value的形式
例子:简单的对象序列化成字符串
<script> var obj = {name:"first",value:"Rick"}; var text = $.param(obj) alert(text); //输出 name=first&value=Rick </script>
如果obj是var obj = {name:”name”,value:”Rick”,name:”good”};,那么重复的后一个key的value内容覆盖前一个key的value,得到的结果是name=good&value=Rick。因此在传递obj是需要注意这点(最好不要重复)。如果真的需要有重复的需求,那么自定义一个函数并使用param和serializeArray处理(循环遍历并组成querying如name=one&name=two)
.serialize()
想要一个表单元素的值被序列化成字符串,这个元素必须含有 name 属性,复选框(checkbox)和单选按钮(radio)(input 类型为 “radio” 或 “checkbox”)的值只有在被选中时才会被序列化。另外,文件选择元素的数据也不会被序列化。表单序列化例子
<body> <form> <input type="text" name="username" /> <select name="habit"> <option value="1">play game</option> <option value="2">code</option> <option value="3">reading</option> </select> man<input type="radio" name="sex" value="0"> woman<input type="radio" name="sex" value="1"> android <input type="checkbox" name="check" value="android" /> ios <input type="checkbox" name="check" value="ios" /> </form> <button>handle</button> <script> $("button").on('click',function(){ var text = $("form").serialize(); alert(text); }) </script> </body>
important note: 以name为key 以value为value ,每个表单元素使用&连接。 它可以指定jQuery选择器来序列化,可以序列化表单。 param()是序列化对象或数组,param和serializeArray 来实现serialize
.serializeArray()
.serializeArray() 方法将表单编码成一个Json对象,可以对单独选择的表单元素对象进行操作。这个函数得到的对象如下面所示,在使用ajax的contentType:applicaton/json的时候需要将它转成json字符串,.serializeArray()得到的还是一个对象,使用JSON.stringify()。
如果将这样的json字符串传后台,我们很容易得到400 bad request,
因为我们的json格式不对,还需要自定义serializeObject转化一下
[ { name: "a", value: "1" }, { name: "b", value: "2" }, { name: "c", value: "3" }, { name: "d", value: "4" }, { name: "e", value: "5" } ]
一个ajax以application/json上传的例子
function handleUseJson() { var params = $("form").serializeObject(); $.ajax({ url : basePath+"/demo4json.do", dataType:"json", contentType: "application/json; charset=utf-8", type : "post", data : JSON.stringify(params), success : function(result) { alert(result.success); } }); } $.fn.serializeObject = function(){ var option = {}; var array = this.serializeArray(); $.each(array, function() { if (option[this.name] !== undefined) { if (!option[this.name].push) { option[this.name] = [option[this.name]]; } option[this.name].push(this.value || ''); } else { option[this.name] = this.value || ''; } }); return option; }
结束语
form表单的提交,有其他jQuery插件,如jQuery.form.js.所以没必要自己去序列化得到表单的值。表单有多个相同的name,如check,那么param()方法的序列化就是name=one&name=two,在后台中,可以用String[]数组来接收,这是contentType为application/x-www-form-urlencoded;charset=UTF-8的情况;
如果是contentType为application/json的话,可以将check的值拼接成一个字符串,在放到json对象中,用JSON.stringfiy转化成字符串上传。也可以在这个json对象中用数组来存放check值,如{check:[better,man]},然后使用JSON.stringfiy转化成字符串。后台json字符串映射规则: {} 对应map或者对象 ,[] 对应数组或者集合
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- JavaScript演示排序算法
- 2015-2016网页设计趋势分析 Web Design of Trends
- jQuery Ajax 跨域调用
- 移动端的长按事件
- jquery教程靠边站,一分钱不花让你免费学会jquery
- JQuery+Strusts1.x无刷新登录
- $.ajax()方法详解
- jQuery ajax - ajax() 方法
- JavaScript 各种遍历方式详解
- 数组方法汇总
- jQuery Html控件基本操作(日常收集整理)
- jQuery插件实现文字无缝向上滚动效果代码
- jQuery菜单插件用法实例
- JQuery 初体验(建议学习jquery)
- 基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
- Jquery实现的table最后一行添加样式的代码
- jQuery实现向下滑出的平滑下拉菜单效果
- jQuery 练习[一] 学习jquery的准备工作
- jquery获得页面元素的坐标值实现思路及代码