使用 jQuery 从复选框组中获取值只能工作一次

Posted

技术标签:

【中文标题】使用 jQuery 从复选框组中获取值只能工作一次【英文标题】:gettings values from checkbox group with jQuery only works once 【发布时间】:2013-07-22 23:42:14 【问题描述】:

我正在尝试构建一个组中所有选定复选框的值的数组(我在此页面上有多个复选框组,但下面是其中之一)。

当我点击一个复选框时,我首先收到一个值为“0”的警报,然后是一个值为“1”的警报。这正如预期的那样。 但是,当我选中第二个复选框时,警报不再出现。我的 Chrome 控制台中也没有看到任何错误。

为什么?

HTML

    <table id="CPHCenter_cblFeatures" class="cblist textbox" style="width:100%;">
        <tbody>
            <tr>
                <td>
                <input id="CPHCenter_cblFeatures_0" type="checkbox" name="ctl00$CPHCenter$cblFeatures$0" onclick="javascript:setTimeout('__doPostBack(\'ctl00$CPHCenter$cblFeatures$0\',\'\')', 0)" value="6">
                <label for="CPHCenter_cblFeatures_0">Arbor</label></td>
                <td><input id="CPHCenter_cblFeatures_4" type="checkbox" name="ctl00$CPHCenter$cblFeatures$4" onclick="javascript:setTimeout('__doPostBack(\'ctl00$CPHCenter$cblFeatures$4\',\'\')', 0)" value="7"><label for="CPHCenter_cblFeatures_4">Disabled access</label></td>
            </tr><tr>
                <td><input id="CPHCenter_cblFeatures_1" type="checkbox" name="ctl00$CPHCenter$cblFeatures$1" onclick="javascript:setTimeout('__doPostBack(\'ctl00$CPHCenter$cblFeatures$1\',\'\')', 0)" value="3"><label for="CPHCenter_cblFeatures_1">Beach</label></td>
                <td><input id="CPHCenter_cblFeatures_5" type="checkbox" name="ctl00$CPHCenter$cblFeatures$5" onclick="javascript:setTimeout('__doPostBack(\'ctl00$CPHCenter$cblFeatures$5\',\'\')', 0)" value="4"><label for="CPHCenter_cblFeatures_5">Forest</label></td>
            </tr><tr>
                <td><input id="CPHCenter_cblFeatures_2" type="checkbox" name="ctl00$CPHCenter$cblFeatures$2" onclick="javascript:setTimeout('__doPostBack(\'ctl00$CPHCenter$cblFeatures$2\',\'\')', 0)" value="1"><label for="CPHCenter_cblFeatures_2">Bridal suite</label></td>
                <td><input id="CPHCenter_cblFeatures_6" type="checkbox" name="ctl00$CPHCenter$cblFeatures$6" onclick="javascript:setTimeout('__doPostBack(\'ctl00$CPHCenter$cblFeatures$6\',\'\')', 0)" value="2"><label for="CPHCenter_cblFeatures_6">Garden</label></td>
            </tr><tr>
                <td><input id="CPHCenter_cblFeatures_3" type="checkbox" name="ctl00$CPHCenter$cblFeatures$3" onclick="javascript:setTimeout('__doPostBack(\'ctl00$CPHCenter$cblFeatures$3\',\'\')', 0)" value="5"><label for="CPHCenter_cblFeatures_3">Dancing room</label></td>
                <td><input id="CPHCenter_cblFeatures_7" type="checkbox" name="ctl00$CPHCenter$cblFeatures$7" onclick="javascript:setTimeout('__doPostBack(\'ctl00$CPHCenter$cblFeatures$7\',\'\')', 0)" value="8"><label for="CPHCenter_cblFeatures_7">Water</label></td>
            </tr>
        </tbody>
    </table>

jQuery

     function getresults()            
         var arr = new Array();
         $.each($("input[name*='cblFeatures']:checked"), function () 
             arr.push($(this).val());
         );

         alert(arr.length);
         arr = new Array();
         return true;
     



     $(document).ready(function () 
         $("#<%=cblFeatures.ClientID%>").click(function ()  getresults(); );
         );

【问题讨论】:

【参考方案1】:

在我看来,这可能是#&lt;%=cblFeatures.ClientID%&gt;selector 的问题......也许可以尝试一下这样的效果:

 $(document).ready( function() 
     $("input[name*='cblFeatures']").click(function()  getresults(); );
 );

以下是它按您预期的方式运行的小提琴:http://jsfiddle.net/tcQwd/

希望有帮助!

【讨论】:

它现在可以工作了...可能是我在 asp.net checkboxlist 控件上设置了 AutoPostBack=true 并将所有内容都放在了更新面板中。我删除了自动回发和更新面板并修复了它。谢谢!【参考方案2】:

为您的checkboxes 定义一个class 并将其用于click 事件,因为id 是一个独特的属性,使用id 的点击事件仅适用于该特定checkbox。假设您已将 checkbox 类应用于每个复选框,则可以按以下方式进行操作

$(".checkbox").click(function ()  getresults(); );

【讨论】:

【参考方案3】:

您只是将点击事件分配给一个 id。

$("#<%=cblFeatures.ClientID%>").click(function ()  getresults(); );

【讨论】:

以上是关于使用 jQuery 从复选框组中获取值只能工作一次的主要内容,如果未能解决你的问题,请参考以下文章

使用 .serializeArray 从所有选中的复选框中获取值

想要使用 jquery 获取选中复选框的所有值

Jquery 复选框全选与反选点击执行一次然后失效解决方案

怎用jquery获取下拉菜单当前选中的值? $("#id").val(); 这个只能获取第一个?求解答????

jQuery DataTables TableTools Export - 获取复选框或单选项目的值

使用jquery表中的复选框从数组中删除JavaScript对象