JavaScript onchange(";<;function>;(this.id)";在c#CheckBox与其他c#控件上的使用
我有一个web文档,它的字段是从c#(.aspx.cs)动态填充的 这些字段中有许多是TextBox或HtmlTextArea元素,但也有一些是Checkbox元素 对于其中的每一个,我都在创建字段时填充了ID属性,并使用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
.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
正在做什么我已经添加了请求的元素以及我发现的其他一些东西