2012年7月5日 星期四

jQuery 的 :checked 在 Opera 不正常



在 jQuery 裡,如果想要知道 checkbox 有幾個被選取,可以使用

$("input:checked").size()

但我發現這方法,適用於 IE、Firefox、Chrome ,卻不適用 Opera 瀏覽器。我試著用一段測試程式如下:


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
    <script>
        function DoCheck() {
            alert($("input:checked").size());            
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <input type="button" id="btn" value="check" onclick="DoCheck();" />
    <div>
    <input id="cb1" type="checkbox" name="cb"  />111 <br />
    <input id="cb2" type="checkbox" name="cb"  />222 <br />
    <input id="cb3" type="checkbox" name="cb"  />333 <br />
    </div>
    </form>
</body>
</html>

在 Opera 測試時,任意更改 checkbox 的選取組合,會發現 alert($("input:checked").size()); 所得到的結果,竟然會出錯,一開始還以為自己眼花,但沒想到是真的。在 jQuery 的 BUG TRACKER,可以看到目前已經有人提出同樣的問題了。

慶幸的,是目前還有一個各個瀏覽器都還支援的寫法:

$("input").filter(":checked").size()

所以,在 jQuery 尚未提出修正之前,還必須先以 .filter() 的方式來取代。

Opera 版本:11.62
jQuery 版本:1.7.2

沒有留言:

張貼留言