(this.id)") 在 c# CheckBox 与其他 c# 控件上,javascript,c#,asp.net"/>

首页 > 解决方案 > JavaScript onchange("(this.id)") 在 c# CheckBox 与其他 c# 控件上

问题描述

我有一个 Web 文档,其字段从 c# (.aspx.cs) 动态填充。

其中许多字段是 TextBox 或 HtmlTextArea 元素,但有些是 Checkbox 元素。

对于其中的每一个,我在创建字段时填充了 ID 属性,以及使用.Attributes.Add("onchange","markChanged(this.id)")

这适用于除复选框以外的所有字段。所以我创建了一个 markCheckChange,因为我发现 Checkbox 不会接受style="backgroundColor:red".style.backgroundColor = "red"输入参数。

我还添加了一个警报,发现 Checkbox 实际上并没有将 传递this.id给函数的参数markCheckChange(param)

结果,我收到了以下类型的错误:

无法设置未定义或空引用的属性

为什么以及这些控件之间有什么区别,有没有更好的方法来处理这个问题?

我刚刚再次查看了检查元素,发现 Checkbox 控件创建的不仅仅是复选框类型的输入字段,它还将它包装在 span 标签中,并且 onchange 函数正在应用于 span 标签(它有没有 id),而不是具有复选框 id 的输入标签。而对于 TextBox 和 HtmlTextArea 输入标签直接放在 cell/td 标签内,没有一些任意的 span 标签。

所以现在的问题变成了如何让 onchange 函数应用于复选框的输入标签,而不是封装它的 span 标签?

根据请求:

function markChange(param) {
        if (userStatus == "readonly") {
            document.getElementById("PrintRecButton").style.display = "none";
            document.getElementById("PrintPDFButton").style.display = "none";

            alert("Please login to make changes.\n\nIf you do not have access and need it,\n   contact the administrator");
            exit();
        }
        else {
            document.getElementById(param).style.backgroundColor = "teal";
            saved = false;
            var page = document.getElementById("varCurrentPage").value;
            markSaveStatus(page, false);
        }
    }

到目前为止,markCheckChange 大致相同,直到我让它正确传递 id 之前,我将无法找出正确的方法来突出显示更改的复选框。

标签: javascriptc#asp.net

解决方案


我找到了一个替代方案。

正如我在问题的编辑中提到的,检查元素功能显示CheckBox类型控件正在创建一组嵌套元素,如下所示:

<span onchange="markChange(this.id)">
    <input type="checkbox" id="<someValue>">
    <label for="<someValue>">
</span>

因此,当 onchange 事件发生时,它发生在没有 id 的跨度上,因此没有 id 被传递document.getElementById()给工作。

在寻找我发现的原因时:HtmlInputCheckBox

从那里我发现以下用于将标签应用于复选框: https ://stackoverflow.com/a/28675013/11035837

因此,CheckBox我将使用HtmlInputCheckBox. 而且我已经确认这会正确地将元素 ID 传递给 JavaScript 函数。


推荐阅读