Sto riscontrando un problema in cui la pagina viene caricata così velocemente, che jquery non ha terminato il caricamento prima di essere chiamato da uno script successivo. C'è un modo per verificare l'esistenza di jquery e se non esiste, aspetta un momento e poi riprova?
In risposta alle risposte / commenti di seguito, sto postando parte del markup.
La situazione ... asp.net masterpage e childpage.
Nella masterpage ho un riferimento a jquery. Quindi nella pagina del contenuto, ho un riferimento allo script specifico della pagina. Quando lo script specifico della pagina viene caricato, si lamenta che "$ non è definito".
Ho inserito avvisi in diversi punti del markup per vedere l'ordine in cui le cose stavano sparando e ho confermato che si attiva in questo ordine:
- Intestazione della pagina master.
- Blocco di contenuto della pagina figlio 1 (situato all'interno dell'header della pagina master, ma dopo la chiamata degli script della pagina master).
- Blocco del contenuto della pagina secondaria 2.
Ecco il markup nella parte superiore della pagina master:
<%@ 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>
Quindi nel corpo della pagina master, c'è un ContentPlaceHolder aggiuntivo:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
Nella pagina figlio, sembra così:
<%@ 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>
Di seguito è riportato il contenuto del file "../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="...">tag semplici , ciò non può accadere. Stai usando qualcosa come RequireJS o LABjs?
$(document).ready()o $(window).load()? Potremmo vedere un esempio?
type="text/Scripts"a type="text/javascript", o sbarazzarsi di tutto insieme non è più necessaria, anche sbarazzarsi della language="javascript. Tanto vale iniziare a provare le cose.
$(document).ready(function(){...});?