У меня есть пользовательский элемент управления с текстовым полем. onclick
текстового поля открывает popupcontrolExtender, на нем есть несколько флажков. Когда флажок установлен, он записывает значения флажка в текстовое поле.Несколько экземпляров usercontrol в asp.net
Вот мой 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%>");
получает текстовое поле и записывает в него.
Когда я использую UserControl на моей странице aspx, он работает нормально, если есть только один экземпляр моего пользовательского элемента управления. Но когда я добавляю второй экземпляр usercontrol, текст записывается только во второй экземпляр текстового поля. Если я установил/снял флажки с первым в первом экземпляре пользовательского элемента управления, все же текст добавляется к флажку altest.
Может ли кто-нибудь помочь мне решить эту проблему? Как я могу получить каждое insatnce этого флажка, чтобы я мог изменить свой java-скрипт?
Редактировать
addding полный код
<%@ 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 – AMS
. Так что, возможно, вам придется снова выполнить getElementsByTagName. –