jQuery——表单应用

一个表单有3个基础组成部分

  • 表单标签:包含处理表单数据所用的服务器端程序URL以及数据提交到服务器的方法。
  • 表单域:包含文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文本上传框等
  • 表单按钮:包括提交按钮、复位按钮和一般按钮,用于将数据传送到服务器上或者取消传送,还可以用来控制其他定义了处理脚本的处理工作。

单行文本框应用

    <form action="#" method="GET" id="regForm">
        <fieldset>
            <legend>个人基本信息</legend>
            <div>
                <label for="username">名称:</label>
                <label id="username" type="text"></label>
            </div>
            <div>
                <label for="pass">密码</label>
                <label id="pass" type="password"></label>
            </div>
            <div>
                <label for="msg">详细信息 :</label>
                <textarea id="msg"></textarea>
            </div>
        </fieldset>
    </form>

当文本框获取焦点后,它的颜色需要有变化;当它失去焦点后,则要恢复为原来的样式。此功能可以极大的提升用户体验,使用户的操作可以得到及时的反馈。

CSS:

    input:focus , textarea:focus {
        border: 1px solid #f00;
        background: #fcc;
    }

IE6并不支持除超链接以外的元素的:hover伪类选择符,这里我们可以用jQuery:

首先添加一个css样式:

    .focus {
        border: 1px solid #f00;
        background: #fcc;        
    }
    $(function() {
        $(":input").focus(function() {
            $(this).addClass("focus");
        }).blur(function() {
            $(this).removeClass("focus");
        })
    })

多行文本框应用

1. 高度变化

    <form>
        <div class="msg">
            <div class="msg_caption">
                <span class="bigger">放大</span>
                <span class="smaller">缩小</span>
            </div>
            <div>
                <textarea id="comment" cols="20" rows="8">多行文本框高度变化.多行文本框高度变化.多行文本框高度变化.
                        多行文本框高度变化.多行文本框高度变化.多行文本框高度变化.多行文本框高度变化.多行文本框高度变化.
                        多行文本框高度变化.
                </textarea>
            </div>
        </div>
    </form>

使用放大,缩小按钮控制评论框高度。

    $(function() {
        var $comment = $("#comment");
        
        $(".bigger").click(function() {
            if ($comment.height() < 500) {
                // 重新设置高度,在原有的高度上加50
                $comment.height($comment.height() + 50);
            }
        });
        $(".smaller").click(function() {
            if ($comment.height() > 50) {
                // 重新设置高度,在原有基础上减50
                $comment.height($comment.height() - 50);
            }
        })
    })

如果想加入动画缓冲效果,修改这里就好了:

                $comment.animate({height:"+=50"},400);

2.滚动条高度变化

通过控制多行文本框的滚动条的变化,使文本框里的内容滚动。

    $(function() {
        var $comment = $("#comment");

        $(".down").click(function() {
            if (!$comment.is(":animated")) {
                $comment.animate({scrollTop : "-=50"},400);
            }
        })
        $(".up").click(function() {
            if (!$comment.is(":animated")) {
                $comment.animate({scrollTop : "+=50"},400);
            }
        })
    })

复选框应用

对复选框的应用,就是对复习框进行全选、反选和全不选等操作。复杂的操作需要与选项挂钩,来达到各种级联反应效果。

    <form>
        你爱好的运动是?<br/>
        <input type="checkbox" name="items" value="足球">足球
        <input type="checkbox" name="items" value="篮球">篮球
        <input type="checkbox" name="items" value="羽毛球">羽毛球
        <input type="checkbox" name="items" value="乒乓球">乒乓球
        <input type="button" id="CheckedAll" value="全 选">
        <input type="button" id="CheckedNo" value="全 选">
        <input type="button" id="CheckedRev" value="反选">
        <input type="button" id="send" value="提 交">
    </form>

如果需要使复选框处于选中或者不选状态,必须通过控制元素的checked属性来达到目的。

  • checked:true 选中
  • checked:false 没选中

全选操作就是用户单击全选按钮时,需要将复选框全部选中,此时需要为全选按钮绑定事件,然后使用选择符寻找符合要求的复选框,最后通过attr()方法来设置属性checked值。

    $("#CheckedAll").click(function() {
        $("[name=items]:checkbox").attr("checked",true);
    })

全不选,只需要将复选框的checked属性的值设置为false。

    $("#CheckedNo").click(function() {
        $("[name=items]:checkbox").attr("checked",false);
    })

反选操作稍微复杂,需要循环遍历每一个复选框进行设置,取它们值的相反值。

    $("#CheckedRev").click(function() {
        $("[name=items]:checkbox").each(function() {
            $(this).attr("checked",!$(this).attr("checked"));
        });
    })

此时用原生JS写更简洁:

    $("#CheckedRev").click(function() {
        $("[name=items]:checkbox").each(function() {
            this.checked = !this.checked;
        });
    })

复选框被选中后,用户单击提交按钮,需要讲选中的项的值取出,可以通过val()方法获取选中的值。

    $("#send").click(function() {
        var str = "你选中的是:\r\n";
        $("[name=items]:checkbox:checked").each(function() {
            str += $(this).val() + "\r\n";
        });
        alert(str);
    })

下拉框应用

HTML:

<style>
    .centent {
        display: inline-block;
        margin-left: 50px;
    }
    span {
        background-color: darkturquoise;
        display: block;
        margin-top: 10px;
    }
</style>
<body>
    <div class="centent">
        <select multiple id="select1" style="width: 100px;height: 160px">
            <option value="1">选项1</option>
            <option value="2">选项2</option>
            <option value="3">选项3</option>
            <option value="4">选项4</option>
            <option value="5">选项5</option>
            <option value="6">选项6</option>
            <option value="7">选项7</option>
            <option value="8">选项8</option>
        </select>
        <div>
            <span id="add">选中添加到右边&gt;&gt;</span>
            <span id="add_all">全部添加到右边&gt;&gt;</span>
        </div>
    </div>
    <div class="centent">
        <select multiple id="select2" style="width:100px;height: 160px"></select>
        <div>
            <span id="remove">&lt;&lt;选中删除到左边</span>
            <span id="remove_all">&lt;&lt;全部删除到左边</span>
        </div>
    </div>
</body>
初始效果

需求

  1. 将选中的选项添加给对方
  2. 将全部选项添加给对方
  3. 双击某个选项将其添加给对方

功能1
将选中的选项添加给对方

首先要选取下拉列表中被选中的项,然后将当前下拉列表中选中的选项删除,最后将删除的选项添加给对方。

先将左边的选项添加到右边:

    $("#add").click(function() {
        var $options = $("#select1 option:selected");       // 获取选中的选项
        var $remove = $options.remove();                // 删除下拉列表中选中的选项
        $remove.appendTo("#select2");
    })

功能2
将全部的选项添加给对方和将选中的选项添加给对方之间的唯一区别就是获取的对象不同,因此只要稍微修改代码就可以实现。

    $("#add").click(function() {
        var $options = $("#select1 option");
        $options.appendTo("#select2");
    })

功能3
首先给下拉列表绑定双击事件

    $("#select1").dblclick(function() {
        // 将选中的选项添加给对方
    })

然后可以通过$("option:selected",this)方法来获取被选中的选项。

    $("#select1").dblclick(function() {
        var $options = $("option:selected",this);
        $options.appendTo("#select2");
    })

综合:

    $("#add").click(function() {
        var $options = $("#select1 option:selected");     
        var $remove = $options.remove();              
        $remove.appendTo("#select2");
    })
    $("#add_all").click(function() {
        var $options = $("#select1 option");
        $options.appendTo("#select2");
    })
    $("#select1").dblclick(function() {
        var $options = $("option:selected",this);
        $options.appendTo("#select2");
    })

从右边添加到左边也大同小异,在此就不赘述。


表单验证

    <form action="" method="POST">
        <div class="int">
            <label for="username">用户名</label>
            <input type="text" id="username" class="required">
        </div>
        <div class="int">
            <label for="email">邮箱:</label>
            <input type="text" id="email" class="required">
        </div>
        <div class="int">
            <label for="personinfo">个人资料:</label>
            <input type="text" id="personinfo">
        </div>
        <div class="sub">
            <input type="submit" value="提交" id="send"><input type="reset" id="res">
        </div>
    </form>

在表单内class属性为required的文本框是必须填写的,因此需要将它与其他的非必须填写表单元素加以区别,即在文本框后面追加一个红色的标识。

    $("form :input.required").each(function() {
        var $required = $("<strong class='high'> *</strong>");
        $(this).parent().append($required);
    })

当用户在“用户名”文本框中填写完信息后,将光标的焦点从“用户名”移出时,需要即时判断用户名是否符合验证规则。当光标的焦点从"邮箱“文本框移出时,需要即时判断邮箱填写是否正确,因此需要给表单元素添加失去焦点事件,blur。

    $("form :input").blur(function() {
        
    })

验证表单元素步骤:

  1. 判断当前失去焦点的元素是用户名还是邮箱,分别处理
  2. 如果是用户名,判断元素的值长度是否小于6,如果小于6,则用红色提醒用户输入不正确,反之,则用绿色提醒用户输入正确。
  3. 如果是邮箱,判断元素的值是否符合邮箱的格式,如果不符合,则用红色提醒用户输入不正确,反之,则用绿色提醒用户输入正确。
  4. 将提醒信息追加到 当前元素的父元素的最后。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  •   JavaScript 最初的一个应用,就是分担服务器处理表单的责任,打破处处依赖服务器的局面。   尽管目前的...
    霜天晓阅读 664评论 0 3
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,875评论 0 0
  • 这个序可能会有些长 先作个自我介绍,我是一名交互设计师,90后。我并不怎么喜欢编辑文章或写点什么,就是因为懒,所以...
    IxDKN阅读 11,044评论 16 160
  • 表单基础知识 在HTML中,表单是由 元素来表示的,而在JS中,表单对应的则是HTMLFormElement类型。...
    oWSQo阅读 907评论 0 1
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,540评论 0 11