一直用的都是attr,但是當動態改變復選框或者單選框的值的時候,初始化的時候,是可以獲取到值的,但是初始化之后,再去改變復選框的值的時候,發現undefined。究其原因。原來是Jquery1.6版本之后attr和prop是有差別的,具體介紹如下:
先說區別
- 對于HTML元素本身就帶有的固有屬性,在處理時,使用prop方法。
- 對于HTML元素我們自己自定義的DOM屬性,在處理時,使用attr方法。
相比attr,prop是1.6.1才新出來的,兩者都是獲取/設置屬性的方法(attributes和properties)。只是,window或document中使用.attr()方法在jQuery1.6之前不能正常運行,因為window和document中不能有attributes。prop應運而生了。
像checkbox,radio和select這樣的元素,選中屬性對應“checked”和“selected”,這些也屬于固有屬性,因此需要使用prop方法去操作才能獲得正確的結果。
什么時候使用attr(),什么時候使用prop()
根據官方的建議:具有 true 和 false 兩個屬性的屬性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()
注意
- 對于表單元素的checked、selected、disabled等屬性,在jQuery 1.6之前,attr()獲取這些屬性的返回值為Boolean類型:如果被選中(或禁用)就返回true,否則返回false。
- 但是從1.6開始,使用attr()獲取這些屬性的返回值為String類型,如果被選中(或禁用)就返回checked、selected或disabled,否則(即元素節點沒有該屬性)返回undefined。并且,在某些版本中,這些屬性值表示文檔加載時的初始狀態值,即使之后更改了這些元素的選中(或禁用)狀態,對應的屬性值也不會發生改變。
- 因此,在jQuery 1.6及以后版本中,請使用prop()函數來設置或獲取checked、selected、disabled等屬性。對于其它能夠用prop()實現的操作,也盡量使用prop()函數。