【发布时间】:2013-09-17 02:44:55
【问题描述】:
我有一个带有文本框的用户控件。 onclick 的文本框打开一个 popupcontrolExtender,上面有几个复选框。当一个复选框被选中时,它将复选框值写入文本框。
这是我的 java 脚本:
<script type = "text/javascript">
function CheckItem(checkBoxList) {
var options = checkBoxList.getElementsByTagName('input');
var arrayOfCheckBoxLabels = checkBoxList.getElementsByTagName("label");
var s = "";
for (i = 0; i < options.length; i++) {
var opt = options[i];
if (opt.checked) {
s = s + "," + arrayOfCheckBoxLabels[i].innerText;
}
}
if (s.length > 0) {
s = s.substring(2, s.length);
}
var TxtBox = document.getElementById("<%=txtCombo.ClientID%>");
TxtBox.value = s;
document.getElementById('<%=hidVal.ClientID %>').value = s;
}
</script>
在上面的 js 中,这段代码 var TxtBox = document.getElementById("<%=txtCombo.ClientID%>"); 获取文本框并写入它。
当我在我的 aspx 页面中使用 UserControl 时,如果我的用户控件只有一个实例,它可以正常工作。但是当我添加用户控件的第二个实例时,文本只写入文本框的第二个实例。如果我在用户控件的第一个实例中选中/取消选中第一个复选框,文本仍会添加到 altest 复选框。
有人可以帮我解决这个问题吗?如何获取复选框的每个实例以便我可以修改我的 java 脚本?
编辑
添加完整代码
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MultiSelectDropDown.ascx.cs" Inherits="MenuTest.MultiSelectDropDown" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<script type = "text/javascript">
function CheckItem(checkBoxList) {
var options = checkBoxList.getElementsByTagName('input');
var arrayOfCheckBoxLabels = checkBoxList.getElementsByTagName("label");
var s = "";
for (i = 0; i < options.length; i++) {
var opt = options[i];
if (opt.checked) {
s = s + "," + arrayOfCheckBoxLabels[i].innerText;
}
}
if (s.length > 0) {
s = s.substring(2, s.length); //sacar la primer 'coma'
}
var TxtBox = document.getElementById("<%=txtCombo.ClientID%>");
TxtBox.value = s;
document.getElementById('<%=hidVal.ClientID %>').value = s;
}
</script>
<asp:TextBox ID="txtCombo" runat="server" ReadOnly="true" Width="150" Font-Size="X-Small"></asp:TextBox>
<cc1:PopupControlExtender ID="PopupControlExtender111" runat="server"
TargetControlID="txtCombo" PopupControlID="Panel111" Position="Bottom"
>
</cc1:PopupControlExtender>
<input type="hidden" name="hidVal" id="hidVal" runat="server" />
<asp:Panel ID="Panel111" runat="server" ScrollBars="Vertical" Width="150" Height="110" BackColor="AliceBlue" BorderColor="Gray" BorderWidth="1">
<asp:CheckBoxList ID="chkList"
runat="server"
Height="80" onclick="CheckItem(this)">
<asp:ListItem Text="Contains" Value="Contains"/>
<asp:ListItem Text="Related" Value="Related"/>
<asp:ListItem Text="Exact" Value="Exact"/>
</asp:CheckBoxList>
</asp:Panel>
【问题讨论】:
-
您确认他们获得了不同的 ID 吗?
-
我已经习惯了开发者工具,并且看到他们拥有不同的 ID
-
对,所以也许你必须再次执行 getElementsByTagName。
-
感谢@HanletEscaño,如果我按标签使用get 元素,是否确保它将写入相应的用户控件文本框?
-
不完全是。让我们解决这个问题:chat.stackoverflow.com/rooms/37269/lets-solve-this
标签: c# javascript asp.net ajax