jQuery梳理之表单

前言

本文内容摘自《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;
        }

结束语

  1. form表单的提交,有其他jQuery插件,如jQuery.form.js.所以没必要自己去序列化得到表单的值。

  2. 表单有多个相同的name,如check,那么param()方法的序列化就是name=one&name=two,在后台中,可以用String[]数组来接收,这是contentType为application/x-www-form-urlencoded;charset=UTF-8的情况;

  3. 如果是contentType为application/json的话,可以将check的值拼接成一个字符串,在放到json对象中,用JSON.stringfiy转化成字符串上传。也可以在这个json对象中用数组来存放check值,如{check:[better,man]},然后使用JSON.stringfiy转化成字符串。后台json字符串映射规则: {} 对应map或者对象 ,[] 对应数组或者集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值