【问题标题】:Can not get value of checked items in checkboxlist via javascript无法通过javascript获取复选框列表中选中项目的值
【发布时间】:2013-01-28 15:08:58
【问题描述】:

在我的应用程序中,我有一个复选框列表。下面列出的是复选框列表的 html,以及在加载它所在的页面时绑定它的 vb 代码。

<asp:CheckBoxList Runat="server" id="chklistTeams" RepeatColumns="7" RepeatDirection="Horizontal"
                        CellPadding="4" Font-Size="7pt"></asp:CheckBoxList>

下面是绑定checkboxlist的VB

myCmd.CommandText = "Select id, title from teams"
Dim DS As SqlDataReader
DS = myCmd.ExecuteReader
chklistTeams.DataValueField = "id"
chklistTeams.DataTextField = "title"
chklistTeams.DataSource = DS
chklistTeams.DataBind()
DS.Close()

当点击保存按钮时,会调用一个 javascript 函数。这是被调用的函数的一部分,它应该让我们得到项目的值。

var checkList = document.getElementById('chklistTeams');
var checkBoxList = checkList.getElementsByTagName("input");
var checkBoxSelectedItems = new Array();

for (var i = 0; i < checkBoxList.length; i++) {
    if (checkBoxList[i].checked) {
        checkBoxSelectedItems.push(checkBoxList[i].value);
        alert('checked - checkBoxList[i]: ' + checkBoxList[i].value)
    }
}

存储到数组中的所有值(通过警报测试) - 以“on”值返回 - 所以我检查了此列表中复选框的 html,这是其中一个复选框的结果

<input name="chklistTeams:21" id="chklistTeams_21" type="checkbox" value="on"/>

我确定这些值已正确绑定到列表 - 因为在获取它们的值的旧方式中,您会获得该项目的正确整数值 - 下面列出的是用于处理此问题的 VB 代码(并返回一串整数,取决于选中的框数 - 没有返回值“on”的列表)。我需要能够通过 javascript 获取此内容,以便我们在此页面上进行的另一项修改,我们现在必须使用 PageMethods 保存,并且不能在后端使用公共共享函数来使用它

将在复选框列表中获得正确值的VB代码

    For Each li In chklistTeams.Items
        If li.Selected = True Then
            strTeamList = strTeamList & li.Value & ","
            bolTeamSelected = True
        End If
    Next
    If bolTeamSelected = True Then
        strTeamList = strTeamList.Substring(0, strTeamList.Length - 1)
    End If

谁能明白为什么获取值的 javascript 方式是给我“on”而不是像 VB 方式那样的整数值?再次感谢你的帮助。再次 - 这必须在 JS 中完成 - 由于函数是公共和共享的,因此不能使用背后的 VB 代码。谢谢。

【问题讨论】:

  • 可能是绑定到复选框的数据保存在视图状态中,而不是作为复选框的属性?我正在浏览此页面msdn.microsoft.com/en-us/library/aa479302.aspx,但找不到如何轻松添加客户端属性。
  • 在前面提到的标题为“执行客户端代码以响应用户操作”下的页面中,它提到了 TextBoxControl.Attributes("someAttribute") 以添加客户端属性,但我不知道是否您可以将数据绑定到此。
  • 我不认为是这种情况。我认为获取项目的 javascript 中存在错误或缺失。我使用相同的方法绑定了其他 2 个下拉列表,并且能够在 javascript 中获取它们的值。我想我错过了获取有关特定列表项信息的步骤。我试图在绑定时添加一个 value 属性,但这并没有成功,仍然返回“on”。
  • Dropdown 和 checkboxlist 不是同一个控件。您甚至声明源中不存在 value 属性。如果它不在源代码中,那么您无法使用 JavaScript 获取它
  • 我的意思是我可以以同样的方式绑定下拉列表,使用 databind VB 端,它可以正确绑定 VB 端的 checkboxlist 值。但是我已经找到了解决这个问题的方法,并且已经将其列为对其他人的建议。感谢您的帮助。

标签: javascript asp.net checkboxlist


【解决方案1】:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkboxlist.aspx

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.items.aspx

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitem.aspx

checkboxlist.items(index)是listitem类型,listitem有一个attributes属性可以设置客户端属性

下面是代码示例: ListItem.Attributes.Add not working

在您的 chklistTeams DataBound 事件中:

foreach(ListItem li in chklistTeams.Items)
{
     li.Attributes.Add("JSvalue", li.Value);
}

在 JavaScript 中:

checkBoxSelectedItems.push(checkBoxList[i].getAttribute("JSvalue"));

【讨论】:

  • 这对我有用——并且为了缩短你可以做的代码 foreach(ListItem li in chklistTeams.Items) { li.Attributes.Add("data-id", li.Value); }
【解决方案2】:

找到了一个解决方案,制作了全局共享数组,在加载时用 id 值填充了数组,然后通过 javascipt 我能够获得检查项目的索引 - 然后可以转到相同索引处的数组获取 id 值以供以后使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多