需要互斥复选框或可取消选择的单选按钮

时间:2016-06-21 18:41:21

标签: javascript c# jquery asp.net

我需要:

  • 可以取消选择的单选按钮或
  • 互斥复选框

背景信息:

我有一个转发器。

对于转发器中的每一行,都有一个关联的文档,可以是“生成”或“重新打印”。

用户应该能够在任何给定行中选择最多一个复选框。在此之后,单击一次按钮将在一次通过中处理所有选择。

当我搜索“互斥复选框”时,常见的回答是“这就是单选按钮的用途。”

当我搜索“Deselectable radio buttons”时,常见的回答是“这就是复选框的用途。”

其他人已经提出了自定义JavaScript / jQuery解决方案,但没有提到CheckBoxes / RadioButtons及其ID的数量是可变的。

我发现很难相信ASP.NET控件不支持此功能。有人遇到过这个问题吗?是否有我可以使用的另一个控件,或者这需要自定义解决方案吗?

注意:我可以访问的唯一第三方软件是Telerik的ASP.NET AJAX用户界面,它没有明显的解决方案。

3 个答案:

答案 0 :(得分:2)

使用Javascript:

在转发器中使用“互斥复选框”示例
window.onload = function(){
   var repeater = document.getElementById('repeater');
   var chks = repeater.querySelectorAll('[type=checkbox]');
   for(var i = 0,chk;chk = chks[i];++i){
      chk.onclick = function(){
         if(this.checked){
           for(var j=0,ch;ch=chks[j;++j]){
             if(ch !== this)
                ch.checked = false;
           }//for
         }//if(this...
      }//chk.onclick
   }//for(var i
}//window.onload

答案 1 :(得分:1)

使用复选框列表并处理SelectedIndexChanged

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)  
{  
    if (checkedListBox1.CheckedItems.Count > 0)  
    {  
        foreach (int i in checkedListBox1.CheckedIndices)  
        {  
            checkedListBox1.SetItemCheckState(i, CheckState.Unchecked);  
        }  
    }  
} 

答案 2 :(得分:0)

我更像是一个StackOverflow人,但我最终在GitHub上发现了这个。

https://gist.github.com/kikegarcia/6104607

这就是我最终的结果,以及一些文档。基本上是一样的,但是使用 .prop 代替 .attr ,因为阅读Tim Down对这两者之间差异的解释:.prop() vs .attr()

// mutually exclusive checkboxes within the scope of a repeater row
function cbOnClick(sender) {   
  if (sender.checked)                                                      
    $(sender).siblings(":checkbox").prop("checked", false);
    //  1        2          3         4      5        6
}
  1. 将事件启动复选框作为jQuery对象。
  2. 获取复选框的兄弟元素...

  3. ...使用type =“checkbox”。

  4. 访问其属性...

  5. ...类型“已检查”......
  6. ...并将它们设置为false。 =>自动取消选中兄弟复选框。