获取多个checkbox值给text

本文展示了一个简单的HTML页面如何通过JavaScript实现与用户输入的交互功能。页面包含一个表格,表格中有复选框和文本框,通过JavaScript函数控制复选框的选择状态并更新文本框的内容。此外还提供了显示和隐藏iframe的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript" type="text/javascript">
function iframeDiplay(){

document.getElementById('inId').style.display="none";
document.getElementById('ifId').style.visibility="visible";
}
function inputOndisplay(){

document.getElementById('ifId').style.visibility="hidden";
document.getElementById('inId').style.display="";
}
function testValue(checkboxName,textName){
var cValue = document.getElementById(checkboxName).value;
var textObj = document.getElementById(textName);

var newArr = new Array();
if(document.getElementById(checkboxName).checked == true){

textObj.value = textObj.value +"," + cValue;
}else{

newArr = textObj.value.split(",");

for(var i=1;i<=newArr.length-1;i++){
if(cValue == newArr[i]){

if(newArr.length <= 2){
var nullArr = new Array();
newArr=nullArr ;
}else{
newArr.splice(i,1);
}
}
}

if(newArr.length ==0){
textObj.value = "";
}else{
for(var j=1;j<newArr.length;j++){
textObj.value = "";
textObj.value = textObj.value +","+ newArr[j];

}
}
}

//alert('---'+textObj.value);
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
<div id="inId" style="">
<table>
<tr >
<td><input id="c1" name="c1" type="checkbox" value="1" onclick="testValue('c1','valueDisplay')"/></td>
<td><input id="c2" name="c2" type="checkbox" value="2" onclick="testValue('c2','valueDisplay')"/></td>
<td><input id="valueDisplay" name="valueDisplay" type="text" value="" /></td>
</tr>
</table>
</div>
<table>
<tr>
<td><a href="javascript:iframeDiplay();">iframe_display</a></td>
<td><a href="javascript:inputOndisplay();">hiddenIframe</a></td>
</tr>
<tr>
<td>
<div id="ifId" style="visibility:hidden" >
<table width="200" border="1" >
<tr >
<td><iframe src="" id="abch"/></td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<td>

</td>
</tr>

</table>

<br/>
</body>
</html>
<think>好的,我现在需要解决用户的问题:在C#中,已经动态生成了多个CheckBox,如何获取它们的Checked呢。首先,我需要回想用户之前的问题历史。之前用户询问了如何将List中的自定义类属性转换为字符串,现在转向了动态生成控件获取其状态,可能是在开发WinForms或WPF应用程序,或者是ASP.NET Web Forms。需要先确定用户使用的是哪种技术,因为不同平台的处理方式不同。 用户提到“动态生成多个checkbox”,动态生成通常意味着在代码中创建控件,而不是在设计器中拖放。因此,首先需要明确用户使用的是哪种框架。比如,在WinForms中,动态控件需要被添加到父控件的Controls集合中,而ASP.NET中可能需要添加到PlaceHolder或Panel中。不同的框架有不同的方法访问这些控件。 接下来,用户想知道如何获取它们的Checked。我需要考虑如何遍历这些动态生成的CheckBox控件,并检查它们的Checked属性。在WinForms中,每个CheckBox的Checked属性是bool类型,而在ASP.NET Web Forms中,可能需要使用Request.Form来获取,或者在服务器端通过FindControl方法查找控件。 可能的步骤包括: 1. 在生成CheckBox时,为它们设置唯一的Name或ID属性,以便后续查找。 2. 将这些CheckBox添加到某个容器控件中,比如Panel或GroupBox。 3. 在需要获取时,遍历容器控件的子控件,筛选出CheckBox类型,并检查其Checked状态。 4. 处理可能的事件,比如按钮点击,触发获取Checked的操作。 此外,需要注意动态控件在回发时的生命周期问题,特别是在ASP.NET中,动态控件需要在每次页面加载时重新创建,否则在回发后无法找到它们,导致获取不到。因此,可能需要指导用户如何在Page_Init或Page_Load事件中重新生成控件,并恢复它们的ID,以便ViewState能够正确恢复状态。 对于WinForms,动态控件的处理相对简单,因为它们通常存在于窗体中,只要不被销毁,可以直接访问。但需要确保在生成控件时将它们添加到父容器,并在遍历时正确找到它们。 可能的代码示例需要根据不同框架来调整。例如,WinForms中遍历Panel.Controls,使用foreach循环和类型检查;ASP.NET中可能需要使用Controls集合递归查找,或者维护一个列表来保存生成的CheckBox引用。 还需要考虑用户可能遇到的常见问题,例如动态控件的ID重复、未正确添加到容器导致找不到控件、或者在ASP.NET中未在回发时重新创建控件。在回答中需要提醒用户注意这些点,并提供相应的解决方法。 最后,总结步骤,给出清晰的示例代码,并解释每一步的作用,确保用户能够理解并应用到自己的项目中。同时,根据用户的技术水平,可能需要解释一些基础概念,比如Controls集合、类型转换、事件处理等,但用户之前的问题显示他们有一定的C#基础,所以可以适当简化解释,侧重具体实现。</think>在 C# 中,动态生成的 `CheckBox` 控件(无论是 **WinForms**、**WASP.NET Web Forms** 还是 **WPF**),获取它们的 `Checked` 的关键在于 **正确遍历控件集合** 并 **保留控件引用**。以下是不同场景下的实现方法: --- ### 一、WinForms 中动态获取 CheckBox选中 #### 1. **动态生成 CheckBox 并保存到容器控件**(如 `Panel`) ```csharp // 动态生成 5 个 CheckBox Panel panel = new Panel(); for (int i = 0; i < 5; i++) { CheckBox checkBox = new CheckBox { Text = $"选项 {i + 1}", Name = $"checkBox_{i}", // 设置唯一 Name 方便后续查找 Location = new Point(10, 20 * i) }; panel.Controls.Add(checkBox); // 将 CheckBox 添加到容器 } this.Controls.Add(panel); ``` #### 2. **获取所有 CheckBox选中状态** ```csharp // 点击按钮时触发 private void btnGetChecked_Click(object sender, EventArgs e) { List<string> checkedValues = new List<string>(); // 遍历容器中的控件,筛选出 CheckBox foreach (Control control in panel.Controls) { if (control is CheckBox checkBox) { if (checkBox.Checked) { checkedValues.Add(checkBox.Text); // 获取选中项的 Text } } } MessageBox.Show($"选中的项:{string.Join(", ", checkedValues)}"); } ``` --- ### 二、ASP.NET Web Forms 中动态获取 CheckBox选中 #### 1. **动态生成 CheckBox 并添加到页面** ```csharp protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 动态生成 5 个 CheckBox for (int i = 0; i < 5; i++) { CheckBox checkBox = new CheckBox { ID = $"checkBox_{i}", // 必须设置唯一 ID Text = $"选项 {i + 1}" }; phCheckBoxes.Controls.Add(checkBox); // 添加到 PlaceHolder 控件 } } } ``` #### 2. **获取选中(需处理回发)** ```csharp protected void btnSubmit_Click(object sender, EventArgs e) { List<string> checkedValues = new List<string>(); // 遍历 PlaceHolder 中的控件 foreach (Control control in phCheckBoxes.Controls) { if (control is CheckBox checkBox) { if (checkBox.Checked) { checkedValues.Add(checkBox.Text); } } } lblResult.Text = $"选中的项:{string.Join(", ", checkedValues)}"; } ``` --- ### 三、WPF 中动态获取 CheckBox选中 #### 1. **动态生成 CheckBox 并添加到 StackPanel** ```csharp // XAML 中定义一个 StackPanel <StackPanel x:Name="spCheckBoxes"/> // 动态生成 CheckBox for (int i = 0; i < 5; i++) { CheckBox checkBox = new CheckBox { Content = $"选项 {i + 1}", Tag = i // 可选:保存额外数据 }; spCheckBoxes.Children.Add(checkBox); } ``` #### 2. **获取选中** ```csharp private void btnGetChecked_Click(object sender, RoutedEventArgs e) { List<string> checkedValues = new List<string>(); foreach (var child in spCheckBoxes.Children) { if (child is CheckBox checkBox && checkBox.IsChecked == true) { checkedValues.Add(checkBox.Content.ToString()); } } MessageBox.Show($"选中的项:{string.Join(", ", checkedValues)}"); } ``` --- ### 四、关键注意事项 1. **唯一标识**:动态生成的控件必须设置唯一 `ID` 或 `Name`,以便查找。 2. **容器控件**:将控件添加到容器(如 `Panel`、`PlaceHolder`、`StackPanel`)中,便于统一管理。 3. **生命周期**(ASP.NET): - 动态控件需在 `Page_Load` 或 `Page_Init` 中重新生成,否则回发后会丢失。 - 使用 `FindControl` 方法可按 ID 查找控件。 --- ### 五、扩展场景:动态 CheckBox 绑定数据源 若动态 CheckBox 基于数据生成,可将数据绑定到 `Tag` 属性,方便后续获取关联: ```csharp // WinForms 示例 CheckBox checkBox = new CheckBox { Text = data.Name, Tag = data.Id // 绑定数据 ID }; ``` 获取选中项的数据: ```csharp List<int> checkedIds = panel.Controls.OfType<CheckBox>() .Where(c => c.Checked) .Select(c => (int)c.Tag) .ToList(); ``` --- 通过上述方法,可以灵活获取动态生成的 CheckBox选中状态,适用于表单提交、批量操作等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值