none
JQuery con MasterPage en vb net produce error con 'getElementsByTagName' RRS feed

  • Pregunta

  • Me estoy iniciando en el mundo del JQuery.

    Me han pasado una maqueta que usa HTML y JQuery, y al cargar las librerías de JQuery a mi sitio web me aparece un mensaje en tiempo de ejecución que indica lo siguiente:

    Error en tiempo de ejecución de Microsoft JScript: El objeto no acepta la propiedad o el método 'getElementsByTagName'.

    Se produce en el archivo  "jquery-1.5.min.js" que cargo desde una MasterPage de la siguiente forma:

    <script type="text/javascript" src="<%# ResolveUrl("~/jquery/jquery-1.5.min.js") %>"></script>
    

    El error se para en la línea del archivo de JavScript: 

    srcElements = elem.getElementsByTagName("*");
    

    La porción de código es:

    jQuery.extend({
    	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
    		var clone = elem.cloneNode(true),
    				srcElements,
    				destElements,
    				i;
    
    		if ( !jQuery.support.noCloneEvent && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
    			// IE copies events bound via attachEvent when using cloneNode.
    			// Calling detachEvent on the clone will also remove the events
    			// from the original. In order to get around this, we use some
    			// proprietary methods to clear the events. Thanks to MooTools
    			// guys for this hotness.
    
    			// Using Sizzle here is crazy slow, so we use getElementsByTagName
    			// instead
    			srcElements = elem.getElementsByTagName("*");
    			destElements = clone.getElementsByTagName("*");
    
    			// Weird iteration because IE will replace the length property
    			// with an element if you are cloning the body and one of the
    			// elements on the page has a name or id of "length"
    			for ( i = 0; srcElements[i]; ++i ) {
    				cloneFixAttributes( srcElements[i], destElements[i] );
    			}
    
    			cloneFixAttributes( elem, clone );
    		}
    
    		// Copy the events from the original to the clone
    		if ( dataAndEvents ) {
    
    			cloneCopyEvent( elem, clone );
    
    			if ( deepDataAndEvents && "getElementsByTagName" in elem ) {
    
    				srcElements = elem.getElementsByTagName("*");
    				destElements = clone.getElementsByTagName("*");
    
    				if ( srcElements.length ) {
    					for ( i = 0; srcElements[i]; ++i ) {
    						cloneCopyEvent( srcElements[i], destElements[i] );
    					}
    				}
    			}
    		}
    		// Return the cloned set
    		return clone;
     },
    


    A resaltar, nose, tengo añadido AJAX en la MasterPage de la siguiente forma:

    <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %>
    

    Y en el bin queda la dll. también tengo un cotrol "asp:ScriptManager" dentro del formulario que contiene el "asp:ContentPlaceHolder".

    No sé si tengo que insertar alguna directiva en mi código para usar el JQuery o realizar alguna configuración más, estoy algo perdido y en los manuales que veo no indica nada al respecto sino que usan sin más el JQuery.

    Gracias.


    Regards, Pablo Martín Gutierrez.
    martes, 23 de agosto de 2011 13:00

Respuestas

  •  

    Ok, haré pruebas con el código que me pases.

     

    Mándamelo a      s a n t y p r @ g m a i l . c o m 


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    • Marcado como respuesta Blonix lunes, 28 de noviembre de 2011 9:20
    miércoles, 24 de agosto de 2011 12:00

Todas las respuestas

  • Hola Pablo.

    ¿Es posible que hayas puesto ese código en el <head></head> de la página?

    Si es así, el problema sería que se está intentando ejecutar el javascript antes de la carga de los elementos de la página. Para solucionarlo, prueba una de las siguientes cosas

    • Poner el código al final del html, antes de la etiqueta de cierre de </body>
    • Poner el código dentro de la functión ready del documento. $(document).ready(function(){ TU CÓDIGO });

     


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    martes, 23 de agosto de 2011 13:29
  • Hola.

    Tienes por casulidad un UpdatePanel en la pagina???

    recuerda que estos dos no se llevan bien juntos jaja, mira esta entrada de mi blog:

    http://nicolocodev.wordpress.com/2011/07/25/jquery-update-panel-de-asp-dana-los-scripts/

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes
    martes, 23 de agosto de 2011 20:21
  • Hola,

    He intentado sacar el código con las etiquetas <script> del Head hasta justo antes del </body> y no funciona, Obtengo el mismo error que antes. 

    Mi Head es es siguiente:

    <head runat="server">
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <link rel="stylesheet" type="text/css" href="css/estilos.css" media="screen" />
      <meta name="keywords" content="Maquint, aplicaci&oacute;n xesti&oacute;n" />
      <meta name="description" content="Maquint, Aplicaci&oacute;n de xesti&oacute;n" />
      <link rel="shortcut icon" href="imaxes/favicon.ico" />  
    
      <script type="text/javascript" src="<%# ResolveUrl("~/jquery/jquery-1.5.min.js") %>"></script>
      <script type="text/javascript" src="<%# ResolveUrl("~/jquery/jquery-ui-1.8.9.custom.min.js") %>"></script>
      <script type="text/javascript">
        var flotante = false;
    
        $(document).ready(function () {
    
          $("#accordion").accordion({ header: 'li a.nivel_un', autoHeight: false, active: 'li a.seleccionado' });
          $("#accordion2").accordion({ header: 'li a.nivel_dous', autoHeight: false, active: 'li a.on' });
          $("#accordion3").accordion({ header: 'li a.nivel_tres', autoHeight: false, active: 'li a.on' });
    
        });
    
      </script>
      <!-- InstanceBeginEditable name="doctitle" -->
      <!--[if IE 7]> 
      <link rel="stylesheet" type="text/css" href="css/estilosIE7.css" title="estilos para IE7" media="screen" />
      <![endif]-->
      <title>Maqint: Presentaci&oacute;n</title>
      <!-- InstanceEndEditable -->
      <!-- InstanceBeginEditable name="head" -->
      <!-- InstanceEndEditable -->
      <asp:ContentPlaceHolder id="head" runat="server">
      </asp:ContentPlaceHolder>
    </head>
    

     

    Cuándo especificas que ponga el código dentro de la función ready, ¿te refieres a todo el contenido de los ficheros JS? El error se produce en la carga de la primera librería de JQuery, simplemente al cargarla que no reconoce el método 'getElementsByTagName'. Si no cargo la librería el código que va dentro del $(document).ready () no reconoce $.

    Muchas Gracias


    Regards, Pablo Martín Gutierrez.
    miércoles, 24 de agosto de 2011 7:13
  • Hola Nicolás,

    No tengo ningún Update Panel, es más, únicamente hay HTML con JQuery ya que es una maqueta que me han pasado y por si sola no falla pero al cargar en la MasterPage me ocurre lo que indico.

     

    Gracias.


    Regards, Pablo Martín Gutierrez.
    miércoles, 24 de agosto de 2011 7:15
  • Hola,

    He intentado sacar el código con las etiquetas <script> del Head hasta justo antes del </body> y no funciona, Obtengo el mismo error que antes. 

    Mi Head es es siguiente:

    <head runat="server">
    
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    
     <link rel="stylesheet" type="text/css" href="css/estilos.css" media="screen" />
    
     <meta name="keywords" content="Maquint, aplicaci&oacute;n xesti&oacute;n" />
    
     <meta name="description" content="Maquint, Aplicaci&oacute;n de xesti&oacute;n" />
    
     <link rel="shortcut icon" href="imaxes/favicon.ico" /> 
    
    
    
     <script type="text/javascript" src="<%# ResolveUrl("~/jquery/jquery-1.5.min.js") %>"></script>
    
     <script type="text/javascript" src="<%# ResolveUrl("~/jquery/jquery-ui-1.8.9.custom.min.js") %>"></script>
    
     <script type="text/javascript">
    
      var flotante = false;
    
    
    
      $(document).ready(function () {
    
    
    
       $("#accordion").accordion({ header: 'li a.nivel_un', autoHeight: false, active: 'li a.seleccionado' });
    
       $("#accordion2").accordion({ header: 'li a.nivel_dous', autoHeight: false, active: 'li a.on' });
    
       $("#accordion3").accordion({ header: 'li a.nivel_tres', autoHeight: false, active: 'li a.on' });
    
    
    
      });
    
    
    
     </script>
    
     <!-- InstanceBeginEditable name="doctitle" -->
    
     <!--[if IE 7]> 
    
     <link rel="stylesheet" type="text/css" href="css/estilosIE7.css" title="estilos para IE7" media="screen" />
    
     <![endif]-->
    
     <title>Maqint: Presentaci&oacute;n</title>
    
     <!-- InstanceEndEditable -->
    
     <!-- InstanceBeginEditable name="head" -->
    
     <!-- InstanceEndEditable -->
    
     <asp:ContentPlaceHolder id="head" runat="server">
    
     </asp:ContentPlaceHolder>
    
    </head>
    
    

     

    Cuándo especificas que ponga el código dentro de la función ready, ¿te refieres a todo el contenido de los ficheros JS? El error se produce en la carga de la primera librería de JQuery, simplemente al cargarla que no reconoce el método 'getElementsByTagName'. Si no cargo la librería el código que va dentro del $(document).ready () no reconoce $.

    Muchas Gracias


    Regards, Pablo Martín Gutierrez.

    Evidentemente para cargar los valores del TAG SRC de los Script JQuery he cambiado el código "<%# ResolveUrl("~/jquery/jquery-1.5.min.js") %>" por una dirección válida para que los encuentre.
    Regards, Pablo Martín Gutierrez.
    miércoles, 24 de agosto de 2011 7:17
  • Hola Pablo. 

    En principio no veo nada raro en el "head" de la página.

    Lo único que se me ocurre es que cambies el archivo del jQuery, por si fue modificado cuando te lo pasaron.

     

    Si quieres podrías pasarme la maqueta y te la reviso.


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    miércoles, 24 de agosto de 2011 11:52
  • Hola,

     

    para salir del paso he introducido en un bloque try ... catch la porción de código que produce el error, y la funcionalidad que quiero usar va para delante.

    Te puedo pasar el JQuery, pero la maqueta no, ya sabes cosas de la LOPD ... dime dónde.

     

    Muchas Gracias :)


    Regards, Pablo Martín Gutierrez.
    miércoles, 24 de agosto de 2011 11:58
  •  

    Ok, haré pruebas con el código que me pases.

     

    Mándamelo a      s a n t y p r @ g m a i l . c o m 


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    • Marcado como respuesta Blonix lunes, 28 de noviembre de 2011 9:20
    miércoles, 24 de agosto de 2011 12:00