页面加载后控件的空引用
Null reference from control after page loads
我正在尝试在页面加载后运行一段javascript:
protected void Page_LoadComplete(object sender, EventArgs e)
{
if (IsPostBack)
{
string controlName = getPostBackControlName();
if (controlName == "btnSubmit" || controlName == "ddlSalary")
{
Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", "onLoadDisplay(this)", true);
}
}
}
以下是引用的javascript:
function onLoadDisplay(sender) {
PerDiemClicked(sender);
}
function PerDiemClicked(sender) {
if (document.getElementById('<%= chkbxPerDiem.ClientID %>').checked == true) {
document.getElementById("PerDiemDisplay").style.display = 'inline';
}
else {
document.getElementById("PerDiemDisplay").style.display = 'none';
}
}
我收到此错误:
0x800a138f - JavaScript 运行时错误:无法获取属性 "已检查"未定义或空引用
我不明白为什么检查返回 null,因为我正在等待页面在检查之前完成回发。如何检查此控件并正确运行上述代码?
编辑:这是复选框:
<asp:CheckBox ID="chkbxPerDiem" runat="server" Checked="false" onclick="PerDiemClicked(this)" />
您的脚本可能在将chkbxPerDiem
添加到 DOM 之前执行。 在窗口加载事件中执行脚本:
window.addEventListener("load", function() {
onLoadDisplay(this);
});
试试这个:
Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", @"
window.addEventListener('load', function() {
onLoadDisplay(this);
});", true);
查看此答案
这是我解决它的方法。
此代码实际上在页面加载后发布:
protected void Page_LoadComplete(object sender, EventArgs e)
{
if (IsPostBack)
{
string controlName = getPostBackControlName();
if (controlName == "btnSubmit" || controlName == "ddlSalary")
{
Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", "window.addEventListener('load', function() { onLoadDisplay(this); });", true);
}
}
}
我必须修改javascript函数以检查它是否存在,然后再检查它是否被选中:
function PerDiemClicked(sender) {
if (document.getElementById('<%= chkbxPerDiem.ClientID %>') != null) {
if (document.getElementById('<%= chkbxPerDiem.ClientID %>').checked == true) {
document.getElementById("PerDiemDisplay").style.display = 'inline';
}
else {
document.getElementById("PerDiemDisplay").style.display = 'none';
}
}
}
谢谢大家。
>Page_LoadComplete
是服务器端事件,所有服务器端事件都将在页面发送到浏览器之前运行。请记住,这些服务器端事件与构建页面有关。您需要在浏览器构建、提供和完全加载页面后运行 JavaScript。这意味着 Page_LoadComplete
事件早在 JavaScript 代码运行之前就运行了。
Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", "onLoadDisplay(this)", true);
上面的代码注册了对 JavaScript 加载函数的调用。但它会在页面顶部插入对该函数的调用。因此,它将在加载页面的其余部分之前运行。
您需要查看 ASP.NET 事件的工作原理。同样,所有服务器端事件甚至在页面发送到浏览器之前运行。JavaScript 应该在浏览器收到并加载页面之前运行。
相关文章:
- 音频控件在mouseover上显示,在mouseout上淡出
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 在构建网站时,我应该在特定用户控件或母版页中引用 JavaScript 库
- 页面加载后控件的空引用
- 剑道 UI - 如何引用控件
- 如何在页面上引用多个相同的用户控件
- KendoUI - 如何引用控件
- 由于引用了相同的javaScript文件,Kendo UI控件没有显示在网页上,如何克服这一点
- 如何在javascript中的其他地方引用控件包装器的值
- 如何在自定义控件中添加.js文件引用
- 引用当前正在使用的HTML选择控件
- 在拖放后获取对控件的引用
- Angular 2引用了验证消息的控件
- jQuery中的控件引用
- 当asp.net控件不存在于内容页中时,母版javascript会导致对象引用错误
- 在javascript中引用ASP.NET web控件
- jQuery引用模板字段中的控件ID
- 如何从 ExtJS 控件引用祖先容器对象
- web服务中的引用控件