Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义$[jQuery、母版页、UserControl、共享/静态事件处理程序、外部javascript]_Jquery_Asp.net_User Controls_Scriptmanager_Pagerequestmanager - Fatal编程技术网

未定义$[jQuery、母版页、UserControl、共享/静态事件处理程序、外部javascript]

未定义$[jQuery、母版页、UserControl、共享/静态事件处理程序、外部javascript],jquery,asp.net,user-controls,scriptmanager,pagerequestmanager,Jquery,Asp.net,User Controls,Scriptmanager,Pagerequestmanager,不幸的是,我无法在我的应用程序之外重现此问题。我有一个VS2012项目,我可以发送给任何愿意看的人。它对我来说是孤立的,但在一个更大的应用程序中却不起作用 我的目标是在母版页中有一个通用的覆盖控件,在部分回发期间,页面可以冒泡显示事件 以下是我所拥有的: 在覆盖中显示消息框的用户控件 获取PageRequestManager对象并添加pageLoaded事件的javascript文件 事件处理程序检查隐藏控件的值,并使用jquery显示/隐藏消息 包含scriptmanager和用户控件的

不幸的是,我无法在我的应用程序之外重现此问题。我有一个VS2012项目,我可以发送给任何愿意看的人。它对我来说是孤立的,但在一个更大的应用程序中却不起作用

我的目标是在母版页中有一个通用的覆盖控件,在部分回发期间,页面可以冒泡显示事件

以下是我所拥有的:

  • 在覆盖中显示消息框的用户控件
  • 获取PageRequestManager对象并添加pageLoaded事件的javascript文件
    • 事件处理程序检查隐藏控件的值,并使用jquery显示/隐藏消息
  • 包含scriptmanager和用户控件的母版页包装在updatepanel中
  • 包含共享事件的类,用于提醒母版页需要显示消息
  • 带有updatepanel的页面,其中包含一个div、一个按钮和一个文本框
  • css文件
测试应用程序中发生了什么:

  • 在框中输入文本并单击按钮
  • 按钮单击事件
    • 将文本复制到updatepanel中的div
    • 调用自定义类中的DisplayMessage方法来警告母版页
  • DisplayMessage实例化和填充自定义事件参数并引发事件
  • 母版页中的处理程序设置usercontrol的属性,并在其UpdatePanel上调用Update
  • 页面显示覆盖和触发器页面已加载[1]
  • javascript函数计算隐藏控件的Value属性并显示消息
  • 用户单击OK按钮
  • 单击处理程序(服务器端)设置隐藏值并触发usercontrol的updatepanel上的更新
  • 信息消失了
“在现实生活中”会发生什么:

  • 在点[1]处,javascript失败,未定义$
chrome控制台允许我输入jQuery并显示ok元素

没有涉及jq插件,scriptmanager位于主窗体的顶部。jquery引用位于指向google的主目录中,没有“http/https”

我曾尝试在ScriptManagerProxy中添加外部脚本,但没有效果。事实上,测试应用程序与

<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>