【问题标题】:GridView WebForm having multiple checkboxes per row but only 1 per row is allowed to be checkedGridView WebForm 每行有多个复选框,但每行只允许检查 1 个
【发布时间】:2015-09-04 06:26:14
【问题描述】:

我有代码,其中 asp.net webforms 中的 gridview 吐出 3 个复选框,我想让 Jquery 轻松遍历 ID,并且只允许检查每行 1 个复选框。

它们将始终具有相同的名称,只是结尾数字会增加,因此第 1 行可能没有数字,然后以 1 结尾,然后以 2 结尾,然后它们都以 3 结尾等等...

我可以在编写大量 javascript/jquery 的过程中完成这一令人遗憾的漫长过程.

我正在考虑正则表达式,其中我检查 ID 的开头,然后检查 ID 的结尾,并且每个 ID 都具有“chkCtrl”并且以一个唯一的数字(如“1”)结尾,即特定的框被选中将取消选中以 1 结尾的另一个“chkCtrl”。因此 Out1 , Y1 , N1

我确信有一种快速的方法可以做到这一点,我似乎找不到它的例子。

例子

<table>
<tr>
    <td>Out</td>
    <td>Yes</td>
    <td>No</td>
</tr>
<tr>
    <td>
        <input id="MainContent_chkCtrlOut" type="checkbox" name="ctl00$MainContent$chkCtrl" />
    </td>
    <td>
        <input id="MainContent_chkCtrlY" type="checkbox" name="ctl00$MainContent$chkCtrl" />
    </td>
    <td>
        <input id="MainContent_chkCtrlN" type="checkbox" name="ctl00$MainContent$chkCtrl" />
    </td>
</tr>
 <tr>
    <td>
        <input id="MainContent_chkCtrlOut1" type="checkbox" name="ctl00$MainContent$chkCtrl" />
    </td>
    <td>
        <input id="MainContent_chkCtrlY1" type="checkbox" name="ctl00$MainContent$chkCtrl" />
    </td>
    <td>
        <input id="MainContent_chkCtrlN1" type="checkbox" name="ctl00$MainContent$chkCtrl" />
    </td>
</tr>

【问题讨论】:

    标签: javascript jquery asp.net gridview


    【解决方案1】:

    这可以通过编写几行 jquery 轻松完成。例如看下面的代码。

    $('input:checkbox').click(function(){
        $(this).closest('tr').find('input:checkbox').removeProp('checked');
        $(this).prop('checked',true);
    });
    

    jsFiddle:https://jsfiddle.net/taleebanwar/a3qk0kc1/1/


    编辑

    正如 Tom Stickel 在 cmets 中提到的那样,使用 removeProp 是一个坏主意。它可能不适用于 jquery 2.*。请参阅Tom Stickel's answer 了解更好的方法。

    【讨论】:

    • 我什至没想到它会如此简洁,哇,这太棒了
    • 如果您更改为 2.1.4 之类的较新版本的 jquery,这实际上是行不通的 .removeProp 也是个坏主意 - 改用 .prop
    【解决方案2】:

    所选答案将在较旧的 jquery 中工作,如果您将所选答案 jquery 版本更改为新版本,复选框将不起作用。

    .removeProp 是个坏主意https://api.jquery.com/removeProp/

    Taleeb 非常接近,但我想说要编辑那一行。

    $('input:checkbox').click(function () {
         $(this).closest('tr').find('input:checkbox').prop('checked', false);
         $(this).prop('checked', true);
    });
    

    【讨论】:

    • 谢谢!我没有意识到这一点。我已经编辑了我的答案以添加对你的引用..
    • 当我注意到 removeProp 时,我想起了 > 1.5/1/6 的更改,并立即将您的 jsfiddle 更改为较新的 jquery 版本,并且复选框不再正常运行。是的,当库中的方法和属性等被更改和/或弃用时,我确实觉得很烦人。尽管在一个非常简洁和准确的答案上做得很好,但 Taleeb
    猜你喜欢
    • 2013-01-08
    • 2021-04-04
    • 1970-01-01
    • 2021-03-04
    • 2011-09-12
    • 2013-06-03
    • 2016-01-10
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多