未定义$[jQuery、母版页、UserControl、共享/静态事件处理程序、外部javascript]
不幸的是,我无法在我的应用程序之外重现此问题。我有一个VS2012项目,我可以发送给任何愿意看的人。它对我来说是孤立的,但在一个更大的应用程序中却不起作用 我的目标是在母版页中有一个通用的覆盖控件,在部分回发期间,页面可以冒泡显示事件 以下是我所拥有的:未定义$[jQuery、母版页、UserControl、共享/静态事件处理程序、外部javascript],jquery,asp.net,user-controls,scriptmanager,pagerequestmanager,Jquery,Asp.net,User Controls,Scriptmanager,Pagerequestmanager,不幸的是,我无法在我的应用程序之外重现此问题。我有一个VS2012项目,我可以发送给任何愿意看的人。它对我来说是孤立的,但在一个更大的应用程序中却不起作用 我的目标是在母版页中有一个通用的覆盖控件,在部分回发期间,页面可以冒泡显示事件 以下是我所拥有的: 在覆盖中显示消息框的用户控件 获取PageRequestManager对象并添加pageLoaded事件的javascript文件 事件处理程序检查隐藏控件的值,并使用jquery显示/隐藏消息 包含scriptmanager和用户控件的
- 在覆盖中显示消息框的用户控件
- 获取PageRequestManager对象并添加pageLoaded事件的javascript文件
- 事件处理程序检查隐藏控件的值,并使用jquery显示/隐藏消息
- 包含scriptmanager和用户控件的母版页包装在updatepanel中
- 包含共享事件的类,用于提醒母版页需要显示消息
- 带有updatepanel的页面,其中包含一个div、一个按钮和一个文本框
- css文件
- 在框中输入文本并单击按钮
- 按钮单击事件
- 将文本复制到updatepanel中的div
- 调用自定义类中的DisplayMessage方法来警告母版页
- DisplayMessage实例化和填充自定义事件参数并引发事件
- 母版页中的处理程序设置usercontrol的属性,并在其UpdatePanel上调用Update
- 页面显示覆盖和触发器页面已加载[1]
- javascript函数计算隐藏控件的Value属性并显示消息
- 用户单击OK按钮
- 单击处理程序(服务器端)设置隐藏值并触发usercontrol的updatepanel上的更新
- 信息消失了
- 在点[1]处,javascript失败,未定义$
<script src="blahblah.js"></script>
编辑:
嘿-脚本是否可能是异步加载的?有没有什么工具可以用来验证什么时候发生了什么?我这样问是因为我将javascript更改为以下内容:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(popup_msg_init);
function popup_msg_init() {
var inputs = document.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
if (input.id.indexOf('hdnHidden') > 0) {
if (input.value == 'True')
popup_msg_hide();
else
popup_msg_show();
}
}
}
function popup_msg_show() {
$('div[id*="divOverlay"]').show();
$('div[id*="divMessage"]').show();
}
function popup_msg_hide() {
$('div[id*="divOverlay"]').hide();
$('div[id*="divMessage"]').hide();
}
但它又回到了“$是未定义的。”
对此有何评论
chrome控制台允许我输入jQuery并显示ok元素
因为当您输入代码时,jQuery已经加载。但这个错误:
未定义$
指示在运行其他一些代码时,未加载jQuery
请注意,JavaScript代码是按照加载到页面中的顺序进行处理的。因此,jQuery库需要在任何使用它的代码之前加载。(也就是说,引擎不够智能,无法加载所有代码,然后像编译语言一样将引用相互链接。)
虽然您在问题中提供了很多信息,但您没有提供的是HTML中的脚本引用。然而,作为一个例子,考虑以下是不正确的:
<script type="text/javascript" src="someScriptThatUsesjQuery.js"></script>
<script type="text/javascript" src="jQuery.js"></script>
与以下正确选项相对:
<script type="text/javascript" src="jQuery.js"></script>
<script type="text/javascript" src="someScriptThatUsesjQuery.js"></script>
包含的其他Java脚本中存在错误。不是语法错误,而是由于ASP.NET如何将它们插入到页面中,它们超出了Sys定义。因此,我使用关联的javascript更改了所有用户控件,以遵循以下模式: -1-使用Javascript助手类将脚本引用添加到页面。(我会在这里使用项目符号,但代码格式化程序在项目符号列表中不起作用-headsup stackoverflow devs) -2-添加脚本
JSHelper.Add("/scripts/myscript.js", Me.Page)
-3-根据控件标记中的内容运行setup函数
<script type="text/javascript" lang="javascript">
if (typeof (Sys) === 'undefined')
$(function () {
init(); });
else {
if (typeof (Sys.WebForms) === 'undefined')
alert('Sys.WebForms not defined!');
else {
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(init);
}
}
</script>
if(typeof(Sys)==“未定义”)
$(函数(){
init();});
否则{
if(typeof(Sys.WebForms)==“未定义”)
警报('Sys.WebForms not defined!');
否则{
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(init);
}
}
该错误表示jQuery未正确包含在页面中。在没有看到任何代码的情况下,这对任何人都有很大的帮助。此链接可能会对您有所帮助。。
<script type="text/javascript" src="someScriptThatUsesjQuery.js"></script>
<script type="text/javascript" src="jQuery.js"></script>
<script type="text/javascript" src="jQuery.js"></script>
<script type="text/javascript" src="someScriptThatUsesjQuery.js"></script>
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Public Class JSHelper
Public Shared Sub Add(path As String, page As Page)
Dim jsFile As New HtmlGenericControl("script")
jsFile.Attributes.Add("type", "text/javascript")
jsFile.Attributes.Add("language", "javascript")
jsFile.Attributes.Add("src", page.ResolveUrl(path))
page.Header.Controls.Add(jsFile)
End Sub
End Class
JSHelper.Add("/scripts/myscript.js", Me.Page)
<script type="text/javascript" lang="javascript">
if (typeof (Sys) === 'undefined')
$(function () {
init(); });
else {
if (typeof (Sys.WebForms) === 'undefined')
alert('Sys.WebForms not defined!');
else {
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(init);
}
}
</script>