2013-04-07 147 views
2

HTML:.attr()複選框問題與jQuery v1.9.1的

<input type="checkbox" /> 
<span id="test">Click here</span> 

JS:

$("#test").click(function() { 
    if ($(":checkbox").attr("checked") == undefined) { 
     $(":checkbox").attr("checked", "checked") 
    } else { 
     $(":checkbox").removeAttr("checked") 
    } 
}); 

小提琴:Link - v1.8.3

這一切正常,但是,如果我將jquery版本更改爲1.9.1,則複選框不會再被檢查。什麼是問題?

小提琴:Link - v.1.9.1

雖然inspect element顯示覆選框切換屬性,如果我在控制檯做,我得到false作爲輸出

回答

5

checked是一個屬性,你應該使用prop方法,當像disabledchecked這樣的布爾屬性被設置爲元素時,該值被映射到元素的相關DOM屬性(瀏覽器做這個)和attrremoveAttr方法不會更改元素的屬性,因爲jQuery 1.6用於修改屬性,所以應該使用prop方法而不是attr

$("#test").click(function() { 
    $('input[type=checkbox]').prop('checked', function(i, state){ 
     return !state; 
    }); 
}); 

http://jsfiddle.net/3rQvj/

+0

+1另外的OP的利益,這裏是鏈接到[** attr()**](http://api.jquery.com/attr/)和[** prop()**](http://api.jquery.com/prop/)文檔當使用'attr()'或'prop()'時,HTML元素行爲和jQuery的很多細節和示例會發生變化,並且推薦用於特定類型的元素。 – Nope 2013-04-07 09:25:17

0

爲什麼不直接使用標籤?這樣它就能在沒有javascript的情況下工作。

<input type="checkbox" id="test" /><label for="test">Click me</label> 
+0

這是我正在做的更大事情的一部分,但邏輯是相同的。 – 2013-04-07 09:23:31