页面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() { })函数。
赶紧再试试。报错了,但是错误提示不一样,大牛说,需要注册一样东西,果断百度之,原来是这个玩意。
再次测试,成功了!
完整的代码:
注册的这个东西到底是何方圣神呢?它是一个脚本控制器,用来处理页面上所有组件及页面局部更新,生成相关的客户端代理脚本以便能够在JS中访问
Web Service,它是AJAX存在的基础,如果页面上使用到了AJAX,必须使用这个控制器,并且每个页面能且只能使用一次。
这个事件是怎么回事呢?MSDN解释:在所有脚本都已加载,并且应用程序中的对象已创建并初始化之后引发。
源代码: <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解释:在所有脚本都已加载,并且应用程序中的对象已创建并初始化之后引发。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 异步流程控制:7 行代码学会 co 模块
- JavaScript拆分字符串时产生空字符的原因
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PowerShell中执行Javascript的方法示例
- javascript asp教程第六课-- response方法
- javascript asp教程More About Recordsets
- javascript asp教程第十二课---session对象
- javascript asp教程创建数据库连接
- javascript asp教程错误处理
- javascript asp教程第十课--global asa