Bootstrap中的radio設置值不能像我們平常給普通radio賦值那樣,因為無效。
我們用Bootstrap框架里的radio組件,代碼:
<div class="radio-list">
<label>
<input type="radio" value="1" name="gender" data-title="男"/> 男
</label>
<label>
<input type="radio" value="2" name="gender" data-title="女"/> 女
</label>
</div>
最后Bootstrap給我們生成的代碼:
<div class="radio-list">
<label>
<div class="radio">
<span class="checked">
<input type="radio" value="1" name="gender" data-title="男" >
</span>
</div> 男
</label>
<label>
<div class="radio"><span><input type="radio" value="2" name="gender" data-title="女"></span></div> 女
</label>
</div>
Bootstrap做了什么?
簡短一下,其實是:
<input type="radio" value="1" name="gender" data-title="男"/> 男
這句變成了
<div class="radio"><span><input type="radio" value="1" name="gender" data-title="男"></span></div> 男
其實是在radio外加了一個,然后再加一個class="radio" 的
如果是選中下的input代碼是啥樣?
<div class="radio"><span class="checked"><input type="radio" value="1" name="gender" data-title="男"></span></div> 男
選中的不是直接在input上加checked屬性,而是在input的父元素span的class上加的,根據這種規則,我們在父元素上加個checked的class。
於是設置input被選中:$(':radio[name=gender][value='1']').parent().addClass('checked');
咦 發現果然radio被選中了,但是!!!當我設置了input必選的情況下,發現通不過驗證,意味着其實沒那么簡單。
然后我就按照常規 給radio賦值:$(':radio[name=gender][value='1']').parent().addClass('checked').attr("checked",true)
發現問題依舊存在,最后針對attr設置無效,一搜 發現應該用prop(),好吧,是我無知了。
最后設置:$(':radio[name=gender][value='1']').parent().addClass('checked').prop("checked",true),確實可以
radio取值就是普通的取值方式:
var sex = $(':radio[name=gender]:checked').val();
Jquery的attr()和prop()的區別,還是建議看一下。總的來說設置 checked、selected、disabled這類的,在jq的1.6+版本的一律用prop()設置比較好,其它用attr()。