動態(tài)改變checkbox的選中狀態(tài)

問題

在寫前端的時候芝加,有一個需求是要用 js 代碼動態(tài)改變復選框 checkbox 的選中狀態(tài)瓮顽。我的思路是通過改變checkbox元素的checked屬性來實現(xiàn)頁面上復選框是否選中的切換卧抗。

一開始的方法是通過jquery的attr()和removeAttr()方法來完成對元素checked屬性的添加與修改啊掏,代碼如下:

leader = $('#leader_modify');
            if(is_leader == '1'){
                leader.attr('checked', 'checked');
            }else{
                leader.removeAttr('checked')
            }

這樣子寫是基本可以完成checkbox的狀態(tài)切換,但會有一個bug:切換在一開始是正常的禾唁,但當我點擊了一次復選框以后效览,之前的狀態(tài)切換就不起作用了(无切。。這不是坑爹嗎Xね鳌哆键?)

原因

經(jīng)過一番漫無目的的搜索資料,我仔細研究了下 jquery的 .attr()
方法瘦锹,attr() 可以獲取匹配的元素集合中的第一個元素的屬性的值籍嘹,或者設置每一個匹配元素的一個或多個屬性。而這個屬性的英文為 Attribute弯院,它有別于Property辱士。

  • property是DOM中的屬性,是JavaScript里的對象
  • attribute是HTML標簽上的特性听绳,它的值只能夠是字符串

boolean attributes颂碘,比如:checked,僅被設置成默認值或初始值椅挣。在一個checkbox的元素中头岔,checked attributes在頁面加載的時候就被設置,而不管checkbox元素是否被選中鼠证。

properties就是瀏覽器用來記錄當前值的東西峡竣。正常情況下,properties反映它們相應的attributes(如果存在的話)名惩。但這并不是boolean attriubutes的情況澎胡。當用戶點擊一個checkbox元素或選中一個select元素的一個option時孕荠,boolean properties保持最新娩鹉。但相應的boolean attributes是不一樣的,正如上面所述稚伍,它們僅被瀏覽器用來保存初始值弯予。

解決方法

由此可見,通過改變 checked 這個 attribute 來實現(xiàn)checkbox 狀態(tài)的動態(tài)改變是不可行的个曙,應該通過設置 checkbox 的 property 屬性 來實現(xiàn)锈嫩。jquery 提供了.prop() 方法。

leader = $('#leader_modify');
            if(is_leader == '1'){
                leader.prop('checked', true)
            }else{
                leader.prop('checked', false);
            }

總結(jié)

attributes 和 properties之間的差異在特定情況下是很重要垦搬。jQuery 1.6之前 呼寸,.attr()方法在取某些 attribute 的值時,會返回 property 的值猴贰,這就導致了結(jié)果的不一致对雪。從 jQuery 1.6 開始, .prop()方法返回 property 的值,而 .attr() 方法返回 attributes 的值米绕。

通過prop()來獲取輸入框里面的值永遠都是和它里面的值同步的瑟捣,而通過attr()老獲取輸入框里面的值一直都是在html標簽里面設置的值馋艺。

根據(jù)官方的建議:具有 true 和 false 兩個屬性的屬性,如 checked, selected 或者 disabled 使用prop()迈套,其他的使用 attr()捐祠。

參考資料

如有疑問或建議,歡迎來我的博客與我討論桑李。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踱蛀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贵白,更是在濱河造成了極大的恐慌星岗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戒洼,死亡現(xiàn)場離奇詭異俏橘,居然都是意外死亡,警方通過查閱死者的電腦和手機圈浇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門寥掐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人磷蜀,你說我怎么就攤上這事召耘。” “怎么了褐隆?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵污它,是天一觀的道長。 經(jīng)常有香客問我庶弃,道長衫贬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任歇攻,我火速辦了婚禮固惯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缴守。我一直安慰自己葬毫,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布屡穗。 她就那樣靜靜地躺著贴捡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪村砂。 梳的紋絲不亂的頭發(fā)上烂斋,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音,去河邊找鬼源祈。 笑死煎源,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的香缺。 我是一名探鬼主播手销,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼图张!你這毒婦竟也來了锋拖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤祸轮,失蹤者是張志新(化名)和其女友劉穎兽埃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體适袜,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡柄错,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了苦酱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片售貌。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疫萤,靈堂內(nèi)的尸體忽然破棺而出颂跨,到底是詐尸還是另有隱情,我是刑警寧澤扯饶,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布恒削,位于F島的核電站,受9級特大地震影響尾序,放射性物質(zhì)發(fā)生泄漏钓丰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一蹲诀、第九天 我趴在偏房一處隱蔽的房頂上張望斑粱。 院中可真熱鬧弃揽,春花似錦脯爪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涌矢,卻和暖如春掖举,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娜庇。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工塔次, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留方篮,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓励负,卻偏偏與公主長得像藕溅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子继榆,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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