《鋒利的jQuery》六、jQuery的表單與表格


title: 《鋒利的jQuery》六甸箱、jQuery的表單與表格
date: 2017-07-23 22:48:00
tags: 鋒利的jQuery


表單的應(yīng)用

表單的組成部分

  1. 表單標(biāo)簽:包含處理表單數(shù)據(jù)所用的服務(wù)器端程序URL以及數(shù)據(jù)提交到服務(wù)器的方法育叁。

  2. 表單域:包含文本框、密碼框芍殖、隱藏域豪嗽、多行文本框、復(fù)選框、單選框龟梦、下拉選擇框和文件上傳框等隐锭。

  3. 表單按鈕:包括提交按鈕、復(fù)位按鈕和一般按鈕计贰,用于將數(shù)據(jù)傳送到服務(wù)器上或者取消傳送成榜,還可以用來控制其它定義了處理腳本的處理工作。

文本框

單行文本框有失去和獲取焦點(diǎn)事件蹦玫。

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

也可以不傳參數(shù)直接focus()blur()赎婚,可以直接讓文本框失去和獲得焦點(diǎn)。

復(fù)選框

jQuery可以控制復(fù)選框的就是是否被選擇樱溉,checked屬性如果為true就是被選中挣输,為false就是沒有選中。而最常用的就是全選福贞、反選撩嚼、全不選這三種按鈕控制復(fù)選框的狀態(tài)。

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

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

// 反選
$('input:checkbox').each(function(){
    $(this).prop('checked',!$(this).prop('checked'));
    // 這里也可以直接用原生來寫
    // this.checked = !this.checked;
})

還有一種復(fù)選框是 全選/全不選挖帘,這是用一個(gè)復(fù)選框控制其他復(fù)選框選項(xiàng)的狀態(tài)完丽。

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

// 在其他選項(xiàng)被取消勾選后,全選的狀態(tài)也應(yīng)該改為false
$('input:checkbox').click(function(){
    var flag = true;
    if(!$(this).prop('checked')){
        flag = false;
    }
    $('#allChecked').prop('checked',flag);
})

下拉框

下拉框的應(yīng)用通常是在左右兩個(gè)<select>元素中相互移動(dòng)<option>選項(xiàng)拇舀,常用的包括將選中項(xiàng)添加到右邊/左邊逻族,全部添加到右邊/左邊。還有雙擊移動(dòng)選中的選項(xiàng)骄崩。

選項(xiàng)從左邊<select>移動(dòng)到右邊<select>

// 獲取選中的選項(xiàng)
var $options = $('#select1 option:selected');
// 追加給對(duì)方聘鳞,appendTo方法會(huì)移動(dòng)且刪除原來的元素。
$options.appendTo($('#select2'));

全部添加到右邊

// 獲取全部選項(xiàng)
var $options = $('#select1 option');
// 追加給對(duì)方
$options.appendTo($('#select2'));

雙擊某個(gè)選項(xiàng)添加給對(duì)方

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

表單驗(yàn)證

表單注冊(cè)最常用的地方就是登錄注冊(cè)要拂,比如有些設(shè)置為required的必填項(xiàng)要檢查其是否填寫正確抠璃。

$('form:input').blur(function(){
    var $parent = $(this).parent();
    // 需要先將上次的提示刪除
    $parent.find('span').remove();
    
    // 驗(yàn)證用戶名
    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>');
        }
    }
    
    // 其他密碼、郵箱等驗(yàn)證都是類似的脱惰,只是判斷規(guī)則不同
    ......
})

// 表單提交時(shí)對(duì)整個(gè)表單再做一次驗(yàn)證
$('#submit').click(function(){
    $('form:input').blur();
    var numErr = $('form:input .error').length;
    if(numErr){
        // 阻止表單提交
        return false;
    }
    alert('注冊(cè)成功')
})

除了在表單blur時(shí)判斷搏嗡,也可以在其輸入文字時(shí)進(jìn)行實(shí)時(shí)判斷。

$('form:input').blur(function(){
    // 上面的事件處理程序拉一,這里就不再重復(fù)寫了
}).keyup(function(){
    // 輸入文字時(shí)執(zhí)行blur的事件處理程序采盒,triggerHandler不會(huì)觸發(fā)blur的瀏覽器默認(rèn)事件,所以不會(huì)真的失去焦點(diǎn)導(dǎo)致無法輸入
    $(this).triggerHandler('blur')  
})

表格的應(yīng)用

表格變色

普通的隔行變色

css部分

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

js部分

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

:odd:even選擇器的索引是從0開始舅踪,所以第一行是偶數(shù)纽甘。

單選框控制表格行高亮

有種表格的選擇是,點(diǎn)擊當(dāng)前行之后抽碌,當(dāng)前行會(huì)變色悍赢,有可能在第一列是一個(gè)單選框决瞳,也需要被選中。

$('tbody>tr').click(function(){
    // 給當(dāng)前行增加selected樣式
    $(this).addClass('selected').siblings().removeClass('selected').end().find(':radio').attr('checked',true);
})
// 初始化表格時(shí)讓默認(rèn)選中的行業(yè)要變色
$('table :radio:checked').parent().parent().addClass('selected')

這里使用了end()方法左权,當(dāng)執(zhí)行siblings()時(shí)皮胡,this已經(jīng)被改變?yōu)楫?dāng)前元素的兄弟元素,而使用end()則會(huì)讓this重新回歸原本的元素赏迟。

復(fù)選框控制表格高亮

和上面的樣式相似屡贺,只是單選改為復(fù)選框

$('tbody>tr').click(function(){
    // 判斷是否被選中,有selected類名就是被選中了
    var hasSelected = $(this).hasClass('selected');
    // 如果選中移除selected類锌杀,否則就加上
    $(this)[hasSelected?'removeClass':'addClass'].('selected');
    // 查找內(nèi)部的checkbox甩栈,設(shè)置相對(duì)應(yīng)的屬性
    $(this).find(':checkbox').attr('checked',!hasSelected);
})
// 初始化表格時(shí)讓默認(rèn)選中的行業(yè)要變色
$('table :checkbox:checked').parent().parent().addClass('selected')

表格的內(nèi)容篩選

相對(duì)是在表格內(nèi)部進(jìn)行姓名的搜索,輸入'王'就顯示出所有名字帶有'王'字的行糕再。

$('#inputName').keyup(function(){
    $('table tbody tr').hide().filter(':contains("' + ( $(this).val() ) + '")').show();
}).keyup();  // 打開頁面時(shí)自動(dòng)執(zhí)行一次

:contains()是匹配包含指定文本的元素量没,在這里指的是輸入的文字,filter()是在this中篩選出符合條件的元素集合

其他應(yīng)用

網(wǎng)頁字體大小

假設(shè)字體的放大和縮小都是span標(biāo)簽突想,文字內(nèi)容元素的id為para殴蹄。

$('span').click(function(){
    var thisEle = $('#para').css('font-size');
    var textFontSize = parseInt(thisEle,10);
    // 獲取現(xiàn)在的字號(hào)的單位
    var unit = thisEle.slice(2);
    var cName = $(this).attr('class');
    // 根據(jù)按鈕的類名判斷是放大還是縮小
    if(cName == 'bigger'){
        textFontSize += 2;
    }else if(cName == 'smaller'){
        textFontSize -= 2;
    }
    $('#para').css('font-size',textFontSize + unit);
})

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市猾担,隨后出現(xiàn)的幾起案子袭灯,更是在濱河造成了極大的恐慌,老刑警劉巖绑嘹,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稽荧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡圾叼,警方通過查閱死者的電腦和手機(jī)蛤克,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夷蚊,“玉大人,你說我怎么就攤上這事髓介√韫模” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵唐础,是天一觀的道長(zhǎng)箱歧。 經(jīng)常有香客問我,道長(zhǎng)一膨,這世上最難降的妖魔是什么呀邢? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮豹绪,結(jié)果婚禮上价淌,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蝉衣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布括尸。 她就那樣靜靜地躺著,像睡著了一般病毡。 火紅的嫁衣襯著肌膚如雪濒翻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天啦膜,我揣著相機(jī)與錄音有送,去河邊找鬼。 笑死僧家,一個(gè)胖子當(dāng)著我的面吹牛雀摘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啸臀,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼届宠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了乘粒?” 一聲冷哼從身側(cè)響起豌注,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灯萍,沒想到半個(gè)月后轧铁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旦棉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年齿风,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绑洛。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡救斑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出真屯,到底是詐尸還是另有隱情脸候,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布绑蔫,位于F島的核電站运沦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏配深。R本人自食惡果不足惜携添,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篓叶。 院中可真熱鬧烈掠,春花似錦羞秤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至母谎,卻和暖如春瘦黑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奇唤。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工幸斥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咬扇。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓甲葬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親懈贺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子经窖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 第一章 入門 基本功能:訪問和操作 dom 元素,控制頁面樣式梭灿,對(duì)頁面的事件處理画侣,與ajax完美結(jié)合,有豐富的插件...
    X_Arts閱讀 1,030評(píng)論 0 2
  • 表單基礎(chǔ)知識(shí) 在HTML中堡妒,表單是由 元素來表示的配乱,而在JS中,表單對(duì)應(yīng)的則是HTMLFormElement類型皮迟。...
    oWSQo閱讀 904評(píng)論 0 1
  • //------------------------- 第一章 認(rèn)識(shí)JQuery ----------------...
    米塔塔閱讀 707評(píng)論 0 9
  • 我站在風(fēng)里 等你 等那個(gè)秋天見過的你 等到秋葉落了 等到頭發(fā)花白 等到爐里的火熄滅 門外白雪皚皚 有幾個(gè)腳印 在雪...
    鬼手佛心牧羊人閱讀 200評(píng)論 3 1
  • 1.對(duì)于理解toB的用戶場(chǎng)景搬泥,最好的方法是先了解到完整的業(yè)務(wù)線,然后進(jìn)入業(yè)務(wù)線去嘗試不同的業(yè)務(wù)模塊伏尼,再理解疏通整個(gè)...
    5f3dccf0222d閱讀 329評(píng)論 0 0