GetElementById Returns 未定义值

GetElementById Returns Undefined Value

我有一个 CheckboxList 有 3 个选项。

在我的 javascript 中,我想检查勾选了哪些选项。

但是验证没有通过,因为检索到的 var 值为 undefined

javascript: 编辑

var schedule = document.getElementById("<%=ddlExecutionSchedule.ClientID%>").value; 
// ^ return as undefined

var schedule2 = document.getElementById("ddlExecutionSchedule").value;
// ^ return as undefined

var scheduleOptions = schedule.getElementsByTagName('input'); 
// ^ error: Uncaught TypeError: Cannot read property 'getElementsByTagName' of undefined

html:

<div class="form-group" id="divExecutionSchedule">
<label class="control-label col-md-2" id="lblExecutionSchedule">Execution Schedule</label>
<div class="col-md-3">
    <div class="input-group">
        <asp:CheckboxList ID="ddlExecutionSchedule" ClientIDMode="Static" CssClass="chkLabel" runat="server" AutoPostBack="false" CellPadding="5" CellSpacing="5" RepeatDirection="Horizontal" RepeatLayout="Table" onchange="ToggleExecutionSchedule(this)" >
            <asp:ListItem Text="Daily" Value="Daily"></asp:ListItem>
            <asp:ListItem Text="Weekly" Value="Weekly"></asp:ListItem>
            <asp:ListItem Text="Monthly" Value="Monthly"></asp:ListItem>
        </asp:CheckboxList>
    </div>
</div>

c#:

//if (ddlExecutionSchedule.Text == "Weekly") // <= Commented off to allow catering for multiple checkboxes to be ticked at the same time
    //{
    string selectedDay = item["Days"] != null ? item["Days"].ToString() : string.Empty;

    if (!string.IsNullOrEmpty(selectedDay))
    {
        List<string> day = selectedDay.Replace(";#",";").Split(';').ToList();
        for (int i = 0; i < chkSelectDay.Items.Count; i++)
        {
            if (day.Contains(chkSelectDay.Items[i].Value))
            {
                //Check only if they match! 
                chkSelectDay.Items[i].Selected = true;
            }
        }
    }
//}

我看过类似的文章,也试过几种方法,包括加入GetElementsByTagName,但是打Uncaught TypeError

非常感谢任何帮助。

它正在返回 undefined,因为复选框列表的容器没有任何值,所以,

您需要遍历 CheckBox 列表以获取选中的值,例如:

编辑:因为你指定了ClientIDMode="Static"所以它不会在运行时改变所以你可以直接指定容器的ID

        //var chkBox = document.getElementById('<%= ddlExecutionSchedule.ClientID %>');
        var chkBox = document.getElementById('ddlExecutionSchedule');
        var options = chkBox.getElementsByTagName('input');
        var listOfSpans = chkBox.getElementsByTagName('span'); //change 'span' as per the page structure
        for (var i = 0; i < options.length; i++)
        {
            if(options[i].checked)
            {
                alert(listOfSpans[i].attributes["JSvalue"].value); //change attribute as per the page structure
            }
        }

你能不能试着去掉双引号,即在 js 中 "<%=ddlExecutionSchedule.ClientID%>" 周围的 "" 而只保留 (<%=ddlExecutionSchedule.ClientID%>)

这可能对你有帮助

请从下面的代码中删除 ClientIDMode="Static"

<asp:CheckboxList ID="ddlExecutionSchedule" CssClass="chkLabel" runat="server" AutoPostBack="false" CellPadding="5" CellSpacing="5" RepeatDirection="Horizontal" RepeatLayout="Table" onchange="ToggleExecutionSchedule(this)" >
    <asp:ListItem Text="Daily" Value="Daily"></asp:ListItem>
    <asp:ListItem Text="Weekly" Value="Weekly"></asp:ListItem>
    <asp:ListItem Text="Monthly" Value="Monthly"></asp:ListItem>
</asp:CheckboxList>

或者如果你想继续 ClientIDMode="Static" 然后编写 JS 语法如下。

var schedule = document.getElementById("ddlExecutionSchedule").value;

这可能对您有所帮助。