您的位置:首页 > Web前端 > JavaScript

页面JS获取不到控件ID

2015-07-21 21:03 621 查看
         为了使页面更加的友好,我们不可避免的要在页面上使用JS,所以在页面上使用javascript获取控件ID是很常见的事情。但是最近在使用JS的使用,遇到了一件让我很头疼的事情,在获取控件ID时,抱错了,监控显示,获取不到控件ID。
源代码: <script type="text/javascript">
Function(){
var args = window.dialogArguments;
var serverTaskInfo = $("#hidTaskInfo").val();
if (serverTaskInfo == "") {
BindSelectorControl(args);
} else {
var task = Sys.Serialization.JavaScriptSerializer.deserialize(serverTaskInfo);
BindSelectorControl(task);
}
if (args.action === "readOnly") {
$find("CommonAutoCompleteWithSelectorControl1")._disabled = true;
$find("CommonAutoCompleteWithSelectorControl2")._disabled = true;
$find("CommonAutoCompleteWithSelectorControl1")._ouBtn.disabled = true;
$find("CommonAutoCompleteWithSelectorControl2")._ouBtn.disabled = true;
}
})
</script>

        首先分析可能是控件ID写错了,但是对比以后发现,名称拼写完全正确,看来不是拼写错误。
        
再次分析,会不会是页面不识别jquery,换成原生的javascript看看行不行,结果还是一样,控件显示为undefined,也不是语言问题。
         
百度之,结果百度居然没有我想要的答案。找了个大牛,大牛说,可能是你的JS有问题,你的JS执行的时候,你要获取的那个控件在页面上还没有渲染完毕,所以你获取不到。(果然是大牛啊)       
         
百度了一下页面上JS最晚的执行事件是什么,度娘的答案是onload()事件,我原来是将代码直接写在了function()中,可能是这个原因,果断测试下。结果很是可惜,还是获取不到控件ID。
         
再次百度页面代码的执行顺序,可知,页面代码是按照先后顺序依次执行的,果断再次测试,将这段代码搬到了Body的脚部,也就是页面代码的最下边,测试结果还是不能令人满意。
       
再次询问大牛,大牛说有个函数执行顺序非常晚,赶紧问之,是
Sys.Application.add_load(function() { })函数。
        
赶紧再试试。报错了,但是错误提示不一样,大牛说,需要注册一样东西,果断百度之,原来是这个玩意。
<asp:ScriptManager runat="server" ID="scriptManager1" EnableScriptGlobalization="true"
EnablePartialRendering="true">
</asp:ScriptManager>

再次测试,成功了!
      
完整的代码:
<head id="Head1" runat="server">
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="scriptManager1" EnableScriptGlobalization="true" EnablePartialRendering="true"> </asp:ScriptManager><script type="text/javascript">
Sys.Application.add_load(function () {
var args = window.dialogArguments;
var serverTaskInfo = $("#hidTaskInfo").val();
if (serverTaskInfo == "") {
BindSelectorControl(args);
} else {
var task = Sys.Serialization.JavaScriptSerializer.deserialize(serverTaskInfo);
BindSelectorControl(task);
}
if (args.action === "readOnly") {
$find("CommonAutoCompleteWithSelectorControl1")._disabled = true;
$find("CommonAutoCompleteWithSelectorControl2")._disabled = true;
$find("CommonAutoCompleteWithSelectorControl1")._ouBtn.disabled = true;
$find("CommonAutoCompleteWithSelectorControl2")._ouBtn.disabled = true;
}
})
</script>
</form>
</body>

          注册的这个东西到底是何方圣神呢?它是一个脚本控制器,用来处理页面上所有组件及页面局部更新,生成相关的客户端代理脚本以便能够在JS中访问
Web Service,它是AJAX存在的基础,如果页面上使用到了AJAX,必须使用这个控制器,并且每个页面能且只能使用一次。
        
这个事件是怎么回事呢?MSDN解释:在所有脚本都已加载,并且应用程序中的对象已创建并初始化之后引发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息