不幸的是,我无法在我的应用程序之外重现此问题。我有一个VS2012项目,我可以发送任何愿意看一看的人。它对我来说是孤立的,但不适用于更大的应用程序。
我的目标是在母版页中有一个共同的叠加控制,页面可以在部分回发期间使显示事件显示。
这是我有:
- ,在覆盖
- 一个JavaScript文件获取PageRequestManager对象,并添加了pageLoaded事件
- 事件处理程序检查显示一个消息框,用户控件一个隐藏的控制的值,并使用jQuery来显示/隐藏消息
- 与一个ScriptManager和用户控制瓦特的主页振打在一个UpdatePanel
- 一类含有共享事件以提醒需要显示
- 与含有一个div,按钮和文本框中一个UpdatePanel的页一个消息中的主页
- CSS文件
在测试应用程序,会发生什么:
- 文本输入框中和按钮点击
- 按钮点击事件
- 复制文本到div中的UpdatePanel
- 调用自定义类的DisplayMessage方法来提醒母版页
- DisplayMessage实例化和填充自定义事件参数,并引发事件
- 主页中的处理程序设置usercontrol的属性,并在其UpdatePanel上调用Update UpdatePanel
- 页面显示叠加和触发页面加载[1]
- th e javascript函数评估隐藏控件的Value属性并显示消息。
- 用户点击OK按钮
- 单击处理程序(服务器端)设置了隐藏的价值和对用户控件的UpdatePanel的触发更新
- 消息消失
会发生什么事“在现实生活中” :
- 在点[1]时,JavaScript将失败,$没有定义
铬控制台允许我输入jQuery并显示元素确定。
没有涉及jq插件,scriptmanager在主窗体的顶部。 jquery的参考是在主指向谷歌没有“HTTP/HTTPS”。
我曾尝试在ScriptManagerProxy中添加外部脚本,但无济于事。实际上,测试应用程序可以在用户控件标记的底部与
<script src="blahblah.js"></script>
正常工作。
任何帮助你可以提供将非常感激。
干杯, .pd。
编辑:
脚本引用的要求:
这是母版页:
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script type="text/javascript" src="/scripts/tabindex.js"></script>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body style="background-color: #cccccc;">
<form id="form1" runat="server">
<asp:ToolkitScriptManager runat="Server" EnablePartialRendering="true" ID="ScriptMan1" EnablePageMethods="true">
</asp:ToolkitScriptManager>
<asp:UpdatePanel ID="updPopupMsg" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<amis:PopupMsg ID="popMaster" runat="server" Hidden="true" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
这是用户控件的标记:
<div id="divOverlay" runat="server" class="helpbox-overlay"></div>
<div id="divMessage" runat="server" class="helpbox">
<asp:HiddenField ID="hdnHidden" runat="server" Value="True" />
<asp:Panel ID="pnlHelpBox" CssClass="helpbox-popup" runat="server">
<h1>
<asp:Label ID="lblTitle" runat="server"></asp:Label></h1>
<p>
<asp:Label ID="lblMsg" runat="server"></asp:Label>
</p>
<p> </p>
<p align="center">
<asp:Button ID="btnClose" CausesValidation="false" Text="Close" runat="server"/>
</p>
</asp:Panel>
</div>
<script type="text/javascript" src="/scripts/popup-msg.js"></script>
,该代码javascript文件看起来像这样:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(popup_msg_init);
function popup_msg_init() {
if ($('input[id*="hdnHidden"]').attr('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();
}
编辑:
嘿 - 这可能脚本被异步加载?有什么工具可以用来验证什么时候发生?我问,因为我改变了以下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();
}
现在,它的一切工作。所以我的理论是,pageLoaded在另一个不能看到jquery的线程上调用popup_msg_init函数,并且在搜索dom时导致的延迟手动给它足够的时间以在调用show/hide函数时加载cuz,所有的常规。
所以我想我会检查,通过在那里坚持超时:
setTimeout(function() {
if ($('input[id*="hdnHidden"]').attr('value') == 'True')
popup_msg_hide();
else
popup_msg_show();
}, 5000);
但它可以追溯到“$是不确定的。”
对此有何评论?
该错误意味着jQuery没有被正确包含在页面中。在没有真正看到任何代码的情况下,这与任何人都可以获得的帮助一样多。 –
http://stackoverflow.com/questions/2194992/jquery-is-not-defined这个链接可能会帮助你.. – Karthikeyan