Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript onchange(";<;function>;(this.id)";在c#CheckBox与其他c#控件上的使用_Javascript_C#_Asp.net - Fatal编程技术网

JavaScript onchange(";<;function>;(this.id)";在c#CheckBox与其他c#控件上的使用

JavaScript onchange(";<;function>;(this.id)";在c#CheckBox与其他c#控件上的使用,javascript,c#,asp.net,Javascript,C#,Asp.net,我有一个web文档,它的字段是从c#(.aspx.cs)动态填充的 这些字段中有许多是TextBox或HtmlTextArea元素,但也有一些是Checkbox元素 对于其中的每一个,我都在创建字段时填充了ID属性,并使用.Attributes.Add(“onchange”,“markchange(this.ID)”) 这在除复选框之外的所有字段上都非常有效。因此,我创建了一个markCheckChange,因为我发现该复选框不接受style=“backgroundColor:red”或.sty

我有一个web文档,它的字段是从c#(.aspx.cs)动态填充的

这些字段中有许多是TextBox或HtmlTextArea元素,但也有一些是Checkbox元素

对于其中的每一个,我都在创建字段时填充了ID属性,并使用
.Attributes.Add(“onchange”,“markchange(this.ID)”)

这在除复选框之外的所有字段上都非常有效。因此,我创建了一个markCheckChange,因为我发现该复选框不接受
style=“backgroundColor:red”
.style.backgroundColor=“red”
类型参数

我还添加了一个警报,发现复选框实际上没有将
this.id
传递到
markCheckChange(param)
函数的参数中

因此,我得到以下类型的错误:

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

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

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

现在的问题是如何让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,否则我将无法找到正确的方法来突出显示已更改的复选框。

我找到了另一种方法

正如我在问题的编辑中提到的,inspect元素特性显示
复选框
类型控件正在创建一组嵌套元素,如下所示:

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

因此,当onchange事件发生时,它发生在没有id的范围内,因此没有为
document.getElementById()
传递id

在寻找我发现的原因时:

在那里,我找到了以下将标签应用于复选框的方法:


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

请提供
markCheckChange
markchange
正在做什么我已经添加了请求的元素以及我发现的其他一些东西