Ich habe ein Problem, bei dem die Seite so schnell geladen wird, dass jquery noch nicht vollständig geladen wurde, bevor sie von einem nachfolgenden Skript aufgerufen wird. Gibt es eine Möglichkeit, die Existenz von jquery zu überprüfen, und wenn es nicht existiert, warten Sie einen Moment und versuchen Sie es dann erneut?
Als Antwort auf die Antworten / Kommentare unten poste ich einige der Markups.
Die Situation ... asp.net Masterseite und Kinderseite.
Auf der Masterseite habe ich einen Verweis auf jquery. Dann habe ich auf der Inhaltsseite einen Verweis auf das seitenspezifische Skript. Wenn das seitenspezifische Skript geladen wird, wird beschwert, dass "$ undefiniert ist".
Ich habe an mehreren Stellen im Markup Warnungen eingefügt, um die Reihenfolge zu sehen, in der die Dinge ausgelöst wurden, und habe bestätigt, dass sie in dieser Reihenfolge ausgelöst werden:
- Masterseitenkopf.
- Untergeordneter Seiteninhaltsblock 1 (befindet sich im Kopf der Masterseite, aber nachdem die Masterseiten-Skripte aufgerufen wurden).
- Untergeordneter Seiteninhaltsblock 2.
Hier ist das Markup oben auf der Masterseite:
<%@ 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>
Im Hauptteil der Masterseite befindet sich dann ein zusätzlicher ContentPlaceHolder:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
Auf der untergeordneten Seite sieht es so aus:
<%@ 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>
Hier ist der Inhalt der Datei "../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();
});
});
<script src="...">Tags laden , kann dies nicht passieren. Verwenden Sie so etwas wie RequireJS oder LABjs?
$(document).ready()oder aus $(window).load()? Könnten wir ein Beispiel sehen?
type="text/Scripts"zu type="text/javascript", oder loszuwerden, alles zusammen ist es nicht mehr nötig, bekommen auch die loszuwerden language="javascript. Könnte auch anfangen, Dinge auszuprobieren.
$(document).ready(function(){...});?