最近在作項目的過程當中碰到了這樣的一個問題:在使用bootstrap模態框的過程當中,在模態框中有一個checkbox標籤,一開始是爲選中的,當點擊觸發模態框按鈕,選中chcekbox時,會顯示勾選,這個時候將選中的狀態緩存起來,而後點擊模態框中的關閉按鈕,再次點擊觸發模態框按鈕彈出模態框,這個時候問題出現了:bootstrap
checkbox標籤已有checked=checked可是不顯示勾選,查看圖片:緩存
網上也查過有解決方案,就是將 $("...").attr("checked", true)改成$("...").prop("checked", true),問題解決,可是,問題是解決了,那麼緣由是出如今哪裏呢?函數
首先來了解下 jquey中的 attr()函數和prop()函數,attr()是處理 attribute的值的,而prop()是處理 property 的值的 ,jQuery 1.6以前 ,.attr()方法在取某些 attribute 的值時,會返回 property 的值,這就致使告終果的不一致。從 jQuery 1.6 開始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值,那麼歸根結底,就是在處理 attribute 和 property。圖片
不少attribute節點有一個相應的property屬性,於是attribute和property很容易被混淆在一塊兒,如某個div元素中的id和class既是attribute也有property,無論哪一種方式均可以訪問和修改,可是對於自定義的attribute節點,或者自定義property,二者就沒有關係了(可是在IE6-7中,二者仍是同樣的,好奇葩的,希望咱們都能早日拋棄IE8如下的),須要注意的是,對於checked特性(attribute)不是對應它checked屬性(property),attribute實際對應的是defaultChecked屬性,並且僅用於設置複選框最初的值,checked的attribute不會由於複選框的狀態而改變,而checked的property會由於複選框的狀態而改變,因此在.attr()函數中,就算設置成了.attr("checked", true),也只是用來存儲默認或者選中屬性的默認值,卻並不改變該複選框被選中和選中,這就是爲何 checkbox標籤已有checked=checked可是不顯示勾選 的緣由所在class