不幸的是,我無法在我的應用程序之外重現此問題。我有一個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