【问题标题】:onclick for checkbox returning undefinedonclick 复选框返回未定义
【发布时间】:2016-05-29 02:18:40
【问题描述】:

我有一个 GridView,其中一列是一个复选框。在数据库中,这些复选框默认为 1。因此,如果用户取消选中该复选框,我将调用 Web 方法来更新数据库。

GridView 代码:

<asp:GridView  style="width:75%"  
                        ID="gvCVRTDetails" 
                        ShowHeaderWhenEmpty="true"
                        CssClass="tblResults" 
                        runat="server" 
                        OnRowDataBound="gvCVRTDetails_RowDataBound"                             
                        DataKeyField="ID" 
                        AutoGenerateColumns="false"
                        allowpaging="false"
                        AlternatingRowStyle-BackColor="#EEEEEE">
                        <HeaderStyle CssClass="tblResultsHeader" />
                        <Columns>
                            <asp:BoundField DataField="ChecklistID" HeaderText="ID" ></asp:BoundField> 
                            <asp:BoundField DataField="Description" HeaderText="Checklist Items"></asp:BoundField> 
                            <asp:BoundField DataField="Checked" HeaderText="OK"></asp:BoundField> 
                    </asp:GridView>

后面的代码:

protected void gvCVRTDetails_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                lookupCVRT work = (lookupCVRT)e.Row.DataItem;
                GridView gv = sender as GridView;             

                e.Row.Attributes.Add("ID", "gvCVRTDetails_" + work.ID);
                e.Row.Cells[0].Attributes.Add("onclick", "event.stopPropagation();");

                HtmlGenericControl lnkShowHide = (HtmlGenericControl)e.Row.FindControl("lnkShowHide");
                HyperLink ChecklistItem = (HyperLink)e.Row.FindControl("ID");

                bool bAll = work.Checked;
                e.Row.Cells[4].Text = "<input type=\"checkbox\" " + ((bAll) ? "checked" : "") + "/>";
                e.Row.Cells[4].Attributes.Add("onclick", "UpdateCheckedBox(" + work.ID.ToString() + ", this.Checked);");
            }
        }

Javascript 函数:

function UpdateCheckedBox(ID, Checked) {
        alert(Checked);
        PageMethods.UpdateCheckUserControl(ID, Checked, OnUpdateSuccess, OnUpdateFail);
    }

但是调用 this.Checked 会返回 undefined 而不是 true 或 false。我也试过this.Value,但这也不起作用

【问题讨论】:

  • .checked.value
  • @Andreas 删除这个词?
  • 没有。 JavaScript 也区分大小写,属性以小写字母开头 -> this.checkedthis.value
  • @Andreas 我尝试使用检查和值,但它仍然返回未定义
  • onclick 是在单元格上定义的,而不是在复选框上。因此this 是单元格而不是复选框。在复选框上定义click 处理程序或将this.checked 更改为从单元格中查找/获取输入的内容(取决于cellthis.children[0].checkedthis.getElementsByTagName("input")[0].checked 可以工作)

标签: javascript jquery asp.net gridview checkbox


【解决方案1】:

你应该把最后一行改成下面

 e.Row.Cells[4].Attributes.Add("onclick", "UpdateCheckedBox('" + work.ID.ToString() + "', this.checked);");

因为如果你不覆盖quotes 周围的work.ID.ToString(),它将被视为一个变量,它是错误的。也正如其他人建议的那样,使用checked 而不是“已检查”。

更新

e.Row.Cells[4].Text = "<input onclick=UpdateCheckedBox('" + work.ID.ToString() + "', this.checked) type=\"checkbox\" " + ((bAll) ? "checked" : "") + "/>";

【讨论】:

  • 它仍然返回未定义
  • 让我给你提琴
  • jsfiddle.net/hemal_301080/ukom74mv/4,我假设 onclick 正在正确生成,在这个小提琴中,它给了我正确的警报。
  • 是的,我理解这个例子,但它与我的代码不完全一样。就像安德烈亚斯在我的问题下所说的那样:onclick 是在单元格上定义的,而不是在复选框上。因此这是单元格而不是复选框。
  • 正确,然后你可以按照我的更新改代码
【解决方案2】:

答案正在从复选框从boundfield 更改为TemplateField

<asp:TemplateField HeaderText ="OK?" ItemStyle-HorizontalAlign="Center">
                                <ItemTemplate>
                                         <asp:CheckBox ID="chkChecked" runat="server" Checked='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Checked")) %>'  ></asp:CheckBox>
                                </ItemTemplate>
                            </asp:TemplateField>

然后在代码后面使用:

CheckBox chkChecked = e.Row.FindControl("chkChecked") as CheckBox;
chkChecked.Attributes.Add("onclick", "UpdateCheckedBox(" + work.ID.ToString() + ", this.checked);");

选择复选框而不是像我尝试做的那样选择单元格要容易得多。

【讨论】:

    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多