2011-10-12 57 views
1

從jQuery 1.4.4移動到jquery 1.6.4開始打破我的與radiobuttonlist相關的代碼。jQuery 1.6.4和RadioButtonList問題

這裏是一個示例代碼和步驟來複制怪異的行爲:

重現步驟:

1:無線電甲已經被選中。

2:選擇單選乙

3:輸入文本框和標籤了一些東西。

你會看到:A被選中,B被選中警報。

那麼從1.6.4到1.4.4究竟發生了什麼變化,導致它破裂?

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
     <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.6.4.min.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     function txtchanged(tb) { 
      $(".rbl").find("input[type='radio']").each(function() { 
       alert($(this).val() + " " + $(this).attr("checked")); 
      }); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:RadioButtonList ID="RadioButtonList1" runat="server" CssClass="rbl"> 
     <asp:ListItem Text="A" Value="A" Selected="True" /> 
     <asp:ListItem Text="B" Value="B" /> 
    </asp:RadioButtonList> 
    <asp:TextBox ID="tb" runat="server" CssClass="tb" onblur="txtchanged(this)"></asp:TextBox> 
    </form> 
</body> 
</html> 

回答

5

報價OP:

那麼究竟從1.6.4改爲1.4.4是導致它 突破?

單選按鈕checked不是屬性,它是屬性。 jQuery在版本1.6中進行了更新,以更正此語義錯誤。

改變了...

.attr("checked") 

這個...

.prop("checked") 

EDITS:

至於爲什麼jQuery是不是向後兼容的OP的評論:

1)它會增加積累到代碼。

2)成爲「向後兼容」幾乎與沒有解決這個問題相同。

See this page to read the release notes on every version of jQuery

也改變了...

.removeAttr('checked') 

這個...

.removeProp('checked') 
+0

是的得到了,但接下來的問題是我必須找到並改變所有這些情況,並確保沒有其他的休息。爲什麼不向後兼容。我甚至注意到在使用1.6.4時,我的代碼中的removeAttr('checked')也被搞亂了。 – gbs

+1

@gbs,看我更新的答案。你只問一個非常具體的問題,我正確地回答了。你的後續問題是爲什麼很多人堅持使用他們當前版本的jQuery。我不可能知道其他實例或情況可能會破壞您的特定網站,但請按照[鏈接](http://docs.jquery。com/Downloading_jQuery#Current_Release)我發佈了閱讀其他東西自1.4.4版以來已更改的內容。 – Sparky

+1

感謝您的澄清。 – gbs