Tengo un problema en el que la página se carga tan rápido que jquery no ha terminado de cargarse antes de que un script posterior lo llame. ¿Hay alguna manera de verificar la existencia de jquery y, si no existe, espere un momento y vuelva a intentarlo?
En respuesta a las respuestas / comentarios a continuación, estoy publicando algunas de las marcas.
La situación ... asp.net masterpage y childpage.
En la página maestra, tengo una referencia a jquery. Luego, en la página de contenido, tengo una referencia al script específico de la página. Cuando se carga el script específico de la página, se queja de que "$ no está definido".
Puse alertas en varios puntos del marcado para ver el orden en el que se disparaban las cosas y confirmé que se dispara en este orden:
- Encabezado de la página maestra.
- Bloque de contenido de la página secundaria 1 (ubicado dentro del encabezado de la página maestra, pero después de que se llaman los scripts de la página maestra).
- Bloque de contenido de la página secundaria 2.
Aquí está el marcado en la parte superior de la página maestra:
<%@ 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>
Luego, en el cuerpo de la página maestra, hay un ContentPlaceHolder adicional:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
En la página secundaria, se ve así:
<%@ 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>
Aquí está el contenido del archivo "../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="...">etiquetas simples , eso no puede suceder. ¿Estás usando algo como RequireJS o LABjs?
$(document).ready()o $(window).load()? ¿Podríamos ver un ejemplo?
type="text/Scripts"a type="text/javascript", o deshacerse de todo junto, ya no es necesario, también deshágase del language="javascript. Bien podría empezar a probar cosas.
$(document).ready(function(){...});?