我們都知道,一般在jquery中設置屬性時要用到attr()方法,現在我們有一個效果,點擊按鈕切換復選框的選中狀態,下面貼出html代碼:
<input type="checkbox" id="check"> <label>復選框</label> <input type="button" value="切換" id="btn">
js代碼:
<script> $(function(){ var flag=false; $("#btn").click(function(){ if(flag==false){ $("#check").attr("checked",true); flag=true; }else{ $("#check").removeAttr("checked"); flag=false; } }); }); </script>
我們發現當點擊按鈕時,第一次點擊時復選框會選中,第二次時點擊復選框會取消選中,但以后再點擊時復選框將不會有任何效果。更奇怪的是,打開調試工具,點擊按鈕時html代碼中會有相應的checked="checked"代碼段,但頁面卻沒效果。
當我們用prop()方法替換attr()方法時,一切將變得正常:
<script> $(function(){ var flag=false; $("#btn").click(function(){ if(flag==false){ $("#check").prop("checked",true); flag=true; }else{ $("#check").removeAttr("checked"); flag=false; } }); }); </script>
這是為什么呢,jquery1.6中新加了一個方法prop(),官方解釋只有一句話:獲取在匹配的元素集中的第一個元素的屬性值。
大家都知道有的瀏覽器只要寫disabled,checked就可以了,而有的要寫成disabled = "disabled",checked="checked",比如用attr("checked")獲取checkbox的checked屬性時選中的時候可以取到值,值為"checked"但沒選中獲取值就是undefined。
jq提供新的方法“prop”來獲取這些屬性,就是來解決這個問題的,以前我們使用attr獲取checked屬性時返回"checked"和"",現在使用prop方法獲取屬性則統一返回true和false。
那么,什么時候使用attr(),什么時候使用prop()?
1.添加屬性名稱該屬性就會生效應該使用prop();
2.是有true,false兩個屬性使用prop();
3.其他則使用attr();
以下是官方建議attr(),prop()的使用: