我试图在页面加载后运行一段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运行时错误:无法获取属性 &#39;检查&#39;未定义或空引用
我不明白为什么check会返回null因为我在等待页面在检查之前完成回发。如何检查此控件并正确运行上述代码?
编辑:这是复选框:
<asp:CheckBox ID="chkbxPerDiem" runat="server" Checked="false" onclick="PerDiemClicked(this)" />
答案 0 :(得分:2)
您的脚本可能会在chkbxPerDiem
添加到DOM之前执行。在load event窗口中执行脚本:
window.addEventListener("load", function() {
onLoadDisplay(this);
});
试试这个:
Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", @"
window.addEventListener('load', function() {
onLoadDisplay(this);
});", true);
请参阅this answer
答案 1 :(得分:0)
Page_LoadComplete
是服务器端事件,所有服务器端事件将在页面发送之前运行到浏览器。请记住,这些服务器端事件与构建页面有关。在页面构建,提供并由浏览器完全加载后,您需要运行JavaScript。这意味着Page_LoadComplete
事件会在JavaScript代码运行之前很久就运行。
Page.ClientScript.RegisterStartupScript(GetType(), "myAlertScript", "onLoadDisplay(this)", true);
上面的代码注册了对JavaScript加载函数的调用。但它会在页面顶部插入对该功能的调用。所以它会在加载页面的其余部分之前运行。
您需要查看ASP.NET事件的工作方式。同样,所有服务器端事件都在页面发送到浏览器之前运行。在浏览器收到并加载页面之后,JavaScript才能运行。
答案 2 :(得分:0)
以下是我如何解决它。
这段代码实际上是在页面加载后发布的:
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';
}
}
}
谢谢大家。