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

Javascript 需要互斥复选框或不可取消选择的单选按钮,javascript,c#,jquery,asp.net,Javascript,C#,Jquery,Asp.net,我需要其中一个: 可取消选择的单选按钮或 互斥复选框 背景信息: 我有一个中继器 对于中继器中的每一行,都有一个可以“生成”或“重新打印”的关联文档 用户应该能够在任何给定行中选择最多一个复选框。在此之后,单击一个按钮将在一次过程中处理他们的所有选择 当我搜索“互斥复选框”时,通常的回答是,“这就是单选按钮的用途。” 当我搜索“可取消选择的单选按钮”时,常见的回答是,“这就是复选框的用途。” 其他人建议使用自定义JavaScript/jQuery解决方案,但没有一种解决方案的复选框/单选按钮

我需要其中一个:

  • 可取消选择的单选按钮或
  • 互斥复选框
背景信息:

我有一个中继器

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

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

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

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

其他人建议使用自定义JavaScript/jQuery解决方案,但没有一种解决方案的复选框/单选按钮数量及其ID是可变的

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


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

使用复选框列表并处理所选的索引

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

使用复选框列表并处理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);  
        }  
    }  
} 
使用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
使用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

我更喜欢StackOverflow,但我最终在GitHub上找到了这个

这是我最后得到的,还有一些文档。基本上是一样的,但是使用.prop而不是.attr,因为这里阅读了Tim Down对两者之间差异的解释:

  • 将事件启动复选框作为jQuery对象获取
  • 获取复选框的兄弟元素

  • 。。。使用type=“checkbox”

  • 访问它们的属性

  • 。。。类型为“已检查”
  • 。。。并将其设置为false。=>自动取消选中同级复选框

  • 我更喜欢StackOverflow,但我最终在GitHub上找到了这个

    这是我最后得到的,还有一些文档。基本上是一样的,但是使用.prop而不是.attr,因为这里阅读了Tim Down对两者之间差异的解释:

  • 将事件启动复选框作为jQuery对象获取
  • 获取复选框的兄弟元素

  • 。。。使用type=“checkbox”

  • 访问它们的属性

  • 。。。类型为“已检查”
  • 。。。并将其设置为false。=>自动取消选中同级复选框

  • “取消选择”是什么意思?您可以将组中的所有收音机设置为
    。checked=false
    用户应该能够从单选按钮中删除所选内容,就像他们可以使用复选框一样。因此,您建议在一组单选按钮上的每一行中调用“.checked=false”的“clear selections”按钮?据我所知,ASP:RadioButtons没有可访问的“OnClientClicked”处理程序,因此需要另一个控件,对吗?取消单选按钮的概念被打破了。单选按钮是“一个值在任何时候都有效”的UI隐喻。如果“unselected”(又称“undefined”)是您拥有的值之一,请为其制作一个单选按钮。这与您认为膨胀的内容无关。这是关于可用性的,这是基于惯例和明显性的。一个单选按钮是不可取消的,这既不明显,也不是一个典型用户知道的惯例。它违背了单选按钮的工作原理,仅仅为了你的直觉而打破了用户的期望。我不认为这是这么做的好理由。这就像使用两个条目的下拉列表,“是”和“否”。错了,你说的“取消选择”是什么意思?您可以将组中的所有收音机设置为
    。checked=false
    用户应该能够从单选按钮中删除所选内容,就像他们可以使用复选框一样。因此,您建议在一组单选按钮上的每一行中调用“.checked=false”的“clear selections”按钮?据我所知,ASP:RadioButtons没有可访问的“OnClientClicked”处理程序,因此需要另一个控件,对吗?取消单选按钮的概念被打破了。单选按钮是“一个值在任何时候都有效”的UI隐喻。如果“unselected”(又称“undefined”)是您拥有的值之一,请为其制作一个单选按钮。这与您认为膨胀的内容无关。这是关于可用性的,这是基于惯例和明显性的。一个单选按钮是不可取消的,这既不明显,也不是一个典型用户知道的惯例。它违背了单选按钮的工作原理,仅仅为了你的直觉而打破了用户的期望。我不认为这是这么做的好理由。这就像使用两个条目的下拉列表,“是”和“否”。错了,我正在调查这个控制。谢谢你的回答。一旦我找到了解决方案,我很可能会接受它。因为所有的帖子都是回帖,所以它并不漂亮,但它会起作用。我现在正在研究这个控件。谢谢你的回答。一旦我找到一个解决方案,我可能会接受它。它并不漂亮,因为所有的帖子都支持它,但它会起作用。