根据ClientScriptManager.RegisterStartupScript 文档,脚本块应在页面完成加载后但在页面OnLoad
事件触发之前执行。
如果您碰巧在OnLoad
事件中添加了文本框,那么选择器将永远不会看到找到控件。
无论哪种方式,您都应该检查您的控件在脚本运行时是否存在。
您可以通过执行以下操作来做到这一点:
console.log($("#txtname").length); //or
alert($("#txtname").length);
如果长度不是0
,那么其他东西可能会覆盖您的readonly
设置。可能在脚本运行或类似之后重新呈现控件。
如果长度是0
那么您的控件尚未在页面上。
您可以尝试将代码包装在 a$(document).ready(function(){//yourcode here})
中,看看它是否有所作为。
您可以改为使用 stringbuilder 来构建脚本,并使用Page.ClientScript.RegisterClientScriptBlock
类似于以下内容:
StringBuilder hideBtnScript = new StringBuilder();
hideBtnScript.Append("<script type=\"text/javascript\">");
hideBtnScript.Append("$(document).ready(function() {");
hideBtnScript.Append("$('#diviv').css({'display': 'block'});");
hideBtnScript.Append("$('#txtname').prop('readonly', true);});");
hideBtnScript.Append("</script>");
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Call my function", hideBtnScript.ToString(), false);