【发布时间】:2011-11-21 03:03:04
【问题描述】:
我遇到的问题是页面加载速度如此之快,以至于 jquery 在被后续脚本调用之前还没有完成加载。有没有办法检查 jquery 是否存在,如果不存在,请稍等片刻,然后重试?
为了回应下面的答案/cmets,我发布了一些标记。
情况...asp.net母版页和子页。
在母版页中,我引用了 jquery。 然后在内容页面中,我引用了特定于页面的脚本。 加载页面特定脚本时,它会抱怨“$ 未定义”。
我在标记中的几个点放置警报以查看触发顺序,并确认它按此顺序触发:
- 母版页标题。
- 子页面内容块 1(位于 母版页的头,但在母版页脚本之后 称为)。
- 子页面内容块 2。
这是母版页顶部的标记:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="SiteMaster" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Reporting Portal</title>
<link href="~/Styles/site.css" rel="stylesheet" type="text/css" />
<link href="~/Styles/red/red.css" rel="stylesheet" type="text/css" />
<script type="text/Scripts" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/Scripts" language="javascript" src="../Scripts/jquery.dropdownPlain.js"></script>
<script type="text/Scripts" language="javascript" src="../Scripts/facebox.js"></script>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
然后在masterpage的body里面,多了一个ContentPlaceHolder:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
在子页面中是这样的:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Dashboard.aspx.cs" Inherits="Data.Dashboard" %>
<%@ Register src="../userControls/ucDropdownMenu.ascx" tagname="ucDropdownMenu" tagprefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<link rel="stylesheet" type="text/css" href="../Styles/paserMap.css" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
***CONTENT HERE***
<script src="../Scripts/Dashboard.js" type="text/javascript"></script>
</asp:Content>
这是“../Script/Dashboard.js”文件的内容:
$(document).ready(function () {
$('.tgl:first').show(); // Show the first div
//Description: East panel parent tab navigation
$('.tabNav label').click(function () {
$('.tabNav li').removeClass('active')
$(this).parent().addClass('active');
var index = $(this).parent('li').index();
var divToggle = $('.ui-layout-content').children('div.tgl');
//hide all subToggle divs
divToggle.hide();
divToggle.eq(index).show();
});
});
【问题讨论】:
-
你在用
$(document).ready(function(){...});吗? -
如果您正在加载带有简单
<script src="...">标记的脚本,则不会发生这种情况。您使用的是 RequireJS 或 LABjs 之类的东西吗? -
您是在
$(document).ready()或$(window).load()中运行后续脚本吗?我们可以举个例子吗? -
@AmandaMyer 现在,忽略所有关于使用准备好的文档的建议,因为你已经在这样做了,但我敢打赌是 mimetype 导致它们不能同步加载
-
尝试将
type="text/Scripts"更改为type="text/javascript",或者将其全部删除,不再需要,同时删除language="javascript。还不如开始尝试。
标签: javascript jquery