为了使页面更加的友好,我们不可避免的要在页面上使用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解释:在所有脚本都已加载,并且应用程序中的对象已创建并初始化之后引发。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u010942465/article/details/46991963