• 知问前端——Ajax表单插件


       传统的表单提交,需要多次跳转页面,极大的消耗资源也缺乏良好的用户体验。而这款form.js表单的Ajax提交插件将解决这个问题。

        一、核心方法

       官方网站:http://malsup.com/jquery/form/

       form.js插件有两个核心方法:ajaxForm()和ajaxSubmit(),它们集合了从控制表单元素到决定如何管理提交进行的功能。

       若没有结合其他插件、js、jQuery里的submit()方法时,就用ajaxForm()提交表单。

       若用js、jQuery里的submit()方法时,就采用submit()方法。

       index.html:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>知问前端</title>
        <script type="text/javascript" src="jquery-1.12.3.js"></script>
        <script type="text/javascript" src="jquery-ui.js"></script>
        <script type="text/javascript" src="jquery.validate.js"></script>
        <script type="text/javascript" src="jquery.form.js"></script>
        <script type="text/javascript" src="index.js"></script>
        <link rel="shortcut icon" type="image/x-icon" href="img/favicon.ico" />
        <link rel="stylesheet" type="text/css" href="jquery-ui.css" />
        <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
        <div id="box"></div>
        <form id="reg" action="123.html">
            <p class="myerror"></p>
            <p>账号:<input type="text" name="user" id="user" /></p>
            <p>密码:<input type="text" name="pass" id="pass" /></p>
            <p><input type="submit" value="提交" /></p>
        </form>
    </body>
    </html>

       style.css:

    .valid {
        background: url(img/reg_succ.png) no-repeat right;
    }
    .abc {
        border: 5px solid green;
    }

       jQuery代码如下:

    $("#reg").ajaxForm(); //ajaxForm自动阻止了默认提交
    $("#reg").submit(); //直接跳转

       若此时<form>表单修改为:

    <form id="reg" method="post" action="add.php">
        <p class="myerror"></p>
        <p>账号:<input type="text" name="user" id="user" /></p>
        <p>密码:<input type="text" name="pass" id="pass" /></p>
        <p><input type="submit" value="提交" /></p>
    </form>

       add.php:

    <?php
        echo 'add.php';
    ?>

       1.ajaxForm提交方式:

    //ajax()中success:function() {}就是这里的function
    $("#reg").ajaxForm(function() {
        alert("提交成功!");
    });

       如何证明ajaxForm()中的function就是ajax()中success:function() {}呢?只须将add.php修改为:

    <?php
        sleep(3);
        echo 'add.php';
    ?>

       使其睡眠3秒钟,然后回复给浏览器,成功返回,弹出“提交成功”对话框。

       注意:使用ajaxForm()方法,会直接实现ajax提交。自动阻止了默认行为,而它提交的默认页面是form控件的action属性的值,提交的方式是method属性的值。

       2.ajaxSubmit()提交方式

       使用submit()提交时,由于会直接跳转,即submit()方法没有阻止默认提交,所以需要自行阻止,代码如下:

    $('#reg').submit(function () {
        ....
        return false;
    });
    $("#reg").submit(function() {
        $(this).ajaxSubmit(); //达到的效果如同$("#reg").ajaxForm();    
        $(this).ajaxSubmit(function() {  //达到的效果也如同$("#reg").ajaxForm(function() { alert("提交成功!"); });
            alert("提交成功!");
        }); //执行的也是ajax()中success方法
        return false; //submit()方法没有阻止默认提交,需要自行阻止
    });

       注意:ajaxForm()方法,是针对form直接提交的,所以阻止了默认行为。而ajaxSubmit()方法,由于是针对submit()方法的,所以需要手动阻止默认行为。而使用了validate.js验证插件,那么ajaxSubmit()比较适合我们。

       二、option参数

       option参数是一个以键值对传递的对象,可以通过这个对象,设置各种Ajax提交的功能。

    $("#reg").submit(function() {        
        $(this).ajaxSubmit({
            url:"test.php", //设置提交的url,可覆盖action属性
            target:"#box", //服务器返回的内容存放在#box里
            type:"get", //GET,POST两种提交方式
            dateType:null, //xml,json,script,默认为null,但经测试null和"html"均可用
            //clearForm:true, //成功提交后,清空表单
            //resetForm:true, //成功提交后,重置表单
            data:{ 
                aaa:"bbb" //增加额外的数据提交
            },
            beforeSubmit: function(formData,jqForm,options) {
                //提交之前执行,一般用于数据验证
                //alert(options.url); //test.php
                //alert(jqForm.html()); //返回<form id="reg"></form>里面的html内容
                //alert(formData[0].name); //得到传递表单元素的name,即user
                //alert(formData[0].value); //得到传递表单元素的value,即输入的值
                //如果数据验证不合法,就返回false,不让提交,返回true让提交,默认返回true
                return true;
            },
            //成功后回调
            success:function(responseText,statusText) {
                //alert("提交成功!");
                alert(responseText + " " + statusText);  //为何返回0 [object HTMLDivElement]?,应该返回test.php success
            },
            //错误时调用
            error:function(event,errorText,errorType) {
                //alert("错误!");
                alert(errorText + " " + errorType); //error Not Found
            }
        });
        return false; //submit()方法没有阻止默认提交,需要自行阻止
    });

       三、工具方法

       form.js除了提供两个核心方法之外,还提供了一些常用的工具方法。这些方法主要是在提交前或后对数据或表单进行处理的。

       1.表单序列化:

    alert($('#reg').formSerialize());

       2.序列化某一个字段:

    alert($('#reg #user').fieldSerialize());

       3.得到某个字段的value值:

    alert($('#reg #user').fieldValue());

       4.重置表单:

    $('#reg').resetForm();

       5.清空某个字段:

    $('#reg #user').clearFields();
  • 相关阅读:
    腾讯微博模拟登录
    python 列表复制给另一个列表,改值两个列表均会改变(备忘)
    python3 re.compile中含有变量
    python3 pyinstaller生成exe文件过程问题解决记录
    python3 不知文件编码情况下打开文件代码记录
    python TKinter部分记录
    python3 列表去除重复项保留原序
    python 字典排序
    python 字典中 重复值去除
    python 一些方法函数
  • 原文地址:https://www.cnblogs.com/yerenyuan/p/5463634.html
Copyright © 2020-2023  润新知