《锋利的jQuery》六、jQuery的表单与表格


title: 《锋利的jQuery》六、jQuery的表单与表格
date: 2017-07-23 22:48:00
tags: 锋利的jQuery


表单的应用

表单的组成部分

  1. 表单标签:包含处理表单数据所用的服务器端程序URL以及数据提交到服务器的方法。

  2. 表单域:包含文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。

  3. 表单按钮:包括提交按钮、复位按钮和一般按钮,用于将数据传送到服务器上或者取消传送,还可以用来控制其它定义了处理脚本的处理工作。

文本框

单行文本框有失去和获取焦点事件。

$('input').focus(function(){
    
}).blur(function(){
    
})

也可以不传参数直接focus()blur(),可以直接让文本框失去和获得焦点。

复选框

jQuery可以控制复选框的就是是否被选择,checked属性如果为true就是被选中,为false就是没有选中。而最常用的就是全选、反选、全不选这三种按钮控制复选框的状态。

// 全选
$('input:checkbox').prop('checked','true');

// 全不选
$('input:checkbox').prop('checked','false');

// 反选
$('input:checkbox').each(function(){
    $(this).prop('checked',!$(this).prop('checked'));
    // 这里也可以直接用原生来写
    // this.checked = !this.checked;
})

还有一种复选框是 全选/全不选,这是用一个复选框控制其他复选框选项的状态。

// 全选和全不选
$('#allChecked').click(function(){
    $('input:checkbox').prop('checked',$(this).prop('checked'))
})

// 在其他选项被取消勾选后,全选的状态也应该改为false
$('input:checkbox').click(function(){
    var flag = true;
    if(!$(this).prop('checked')){
        flag = false;
    }
    $('#allChecked').prop('checked',flag);
})

下拉框

下拉框的应用通常是在左右两个<select>元素中相互移动<option>选项,常用的包括将选中项添加到右边/左边,全部添加到右边/左边。还有双击移动选中的选项。

选项从左边<select>移动到右边<select>

// 获取选中的选项
var $options = $('#select1 option:selected');
// 追加给对方,appendTo方法会移动且删除原来的元素。
$options.appendTo($('#select2'));

全部添加到右边

// 获取全部选项
var $options = $('#select1 option');
// 追加给对方
$options.appendTo($('#select2'));

双击某个选项添加给对方

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

表单验证

表单注册最常用的地方就是登录注册,比如有些设置为required的必填项要检查其是否填写正确。

$('form:input').blur(function(){
    var $parent = $(this).parent();
    // 需要先将上次的提示删除
    $parent.find('span').remove();
    
    // 验证用户名
    if($(this).is('#username')){
        if(this.value == '' || this.value.length < 6){
            var errMsg = '至少要输入6位的用户名';
            $parent.append('<span class="tips error">' + errMsg + '</span>');
        }else{
            var okMsg = '输入正确';
            $parent.append('<span class="tips success">' + okMsg + '</span>');
        }
    }
    
    // 其他密码、邮箱等验证都是类似的,只是判断规则不同
    ......
})

// 表单提交时对整个表单再做一次验证
$('#submit').click(function(){
    $('form:input').blur();
    var numErr = $('form:input .error').length;
    if(numErr){
        // 阻止表单提交
        return false;
    }
    alert('注册成功')
})

除了在表单blur时判断,也可以在其输入文字时进行实时判断。

$('form:input').blur(function(){
    // 上面的事件处理程序,这里就不再重复写了
}).keyup(function(){
    // 输入文字时执行blur的事件处理程序,triggerHandler不会触发blur的浏览器默认事件,所以不会真的失去焦点导致无法输入
    $(this).triggerHandler('blur')  
})

表格的应用

表格变色

普通的隔行变色

css部分

.even {
    background:#fff38f;
}
.odd {
    background:#ffffff;
}

js部分

$('tbody > tr:odd').addClass('odd');  // 奇数行
$('tbody > tr:even').addClass('even');   // 偶数行

:odd:even选择器的索引是从0开始,所以第一行是偶数。

单选框控制表格行高亮

有种表格的选择是,点击当前行之后,当前行会变色,有可能在第一列是一个单选框,也需要被选中。

$('tbody>tr').click(function(){
    // 给当前行增加selected样式
    $(this).addClass('selected').siblings().removeClass('selected').end().find(':radio').attr('checked',true);
})
// 初始化表格时让默认选中的行业要变色
$('table :radio:checked').parent().parent().addClass('selected')

这里使用了end()方法,当执行siblings()时,this已经被改变为当前元素的兄弟元素,而使用end()则会让this重新回归原本的元素。

复选框控制表格高亮

和上面的样式相似,只是单选改为复选框

$('tbody>tr').click(function(){
    // 判断是否被选中,有selected类名就是被选中了
    var hasSelected = $(this).hasClass('selected');
    // 如果选中移除selected类,否则就加上
    $(this)[hasSelected?'removeClass':'addClass'].('selected');
    // 查找内部的checkbox,设置相对应的属性
    $(this).find(':checkbox').attr('checked',!hasSelected);
})
// 初始化表格时让默认选中的行业要变色
$('table :checkbox:checked').parent().parent().addClass('selected')

表格的内容筛选

相对是在表格内部进行姓名的搜索,输入'王'就显示出所有名字带有'王'字的行。

$('#inputName').keyup(function(){
    $('table tbody tr').hide().filter(':contains("' + ( $(this).val() ) + '")').show();
}).keyup();  // 打开页面时自动执行一次

:contains()是匹配包含指定文本的元素,在这里指的是输入的文字,filter()是在this中筛选出符合条件的元素集合

其他应用

网页字体大小

假设字体的放大和缩小都是span标签,文字内容元素的id为para。

$('span').click(function(){
    var thisEle = $('#para').css('font-size');
    var textFontSize = parseInt(thisEle,10);
    // 获取现在的字号的单位
    var unit = thisEle.slice(2);
    var cName = $(this).attr('class');
    // 根据按钮的类名判断是放大还是缩小
    if(cName == 'bigger'){
        textFontSize += 2;
    }else if(cName == 'smaller'){
        textFontSize -= 2;
    }
    $('#para').css('font-size',textFontSize + unit);
})

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

推荐阅读更多精彩内容

  • 第一章 入门 基本功能:访问和操作 dom 元素,控制页面样式,对页面的事件处理,与ajax完美结合,有丰富的插件...
    X_Arts阅读 983评论 0 2
  • 表单基础知识 在HTML中,表单是由 元素来表示的,而在JS中,表单对应的则是HTMLFormElement类型。...
    oWSQo阅读 893评论 0 1
  • //------------------------- 第一章 认识JQuery ----------------...
    米塔塔阅读 679评论 0 9
  • 我站在风里 等你 等那个秋天见过的你 等到秋叶落了 等到头发花白 等到炉里的火熄灭 门外白雪皑皑 有几个脚印 在雪...
    鬼手佛心牧羊人阅读 186评论 3 1
  • 1.对于理解toB的用户场景,最好的方法是先了解到完整的业务线,然后进入业务线去尝试不同的业务模块,再理解疏通整个...
    5f3dccf0222d阅读 296评论 0 0