2010-04-28 15 views
8

tengo una página donde se carga jQuery + otros de JS: pestañascargando jquery dos veces causa un error?

<script src="/eiv/javascripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/jquery.jeditable.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/jquery-ui-1.7.1.custom.min.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/corner.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/jquery.form.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/validationdate.js" type="text/javascript"></script> 

estoy de carga siguientes:

<%if (tabnum == 1) {%> 
     <script type="text/javascript"> 

      $(document).ready(function(){ 
       $("#tabs").tabs(); 
       $("#tabs ul li a").corner('7px top'); 

       var $tabs = $('#tabs').tabs(); 
       $tabs.tabs('select', 0); 
       dateValidation(); 
       changeOption(); 
       deleteConfirmation(); 
     }); 
     </script> 
<%} else if (tabnum==2) {%> 
     <script type="text/javascript"> 

      $(document).ready(function(){ 
       $("#tabs").tabs(); 
       $("#tabs ul li a").corner('7px top'); 

       var $tabs = $('#tabs').tabs(); 
       $tabs.tabs('select', 1); 

        changeOption(); 
        deleteConfirmation(); 
     }); 
     </script> 
<%}%> 

la validationdate.js es una mina construida js que comprueba las fechas y otras cosas. que tiene esta como la primera línea:

document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>'); 

Problema: es que en la producción en tiempo ..la página errores y dar un error de JS. Esto hace que no se pueda hacer clic en las pestañas. Este error ocurre intermitentemente y parece que no puedo reproducirlo en mi máquina. Ambas máquinas están usando IE. El error también ocurre en Firefox, aunque poco error de JS no aparece en Firefox. e incluso tengo firebug que tampoco muestra ningún error JS.

Sospecho que se produce un error porque validationdate.js también está cargando jquery-1.3.2.min.js. ¿Puede ser esto un error?

Por cierto, el error que consigo es JS 'excepción capturada pero no lanzada ..line 23' y la línea 23 está siguiendo

<script src="/eiv/javascripts/jquery-1.3.2.min.js" type="text/javascript"></script> 

estoy realmente fuera de opciones aquí y estoy dispuesto a probar cosas fuera. y también formas de reproducir en mi máquina para que pueda arreglarlo !!

+0

Asegúrese de estar utilizando una instancia de jquery y va por encima de todos los demás archivos js incluidos. – Sarfraz

+0

sí, solo hay una instancia de jquery en mi página. sin embargo, como dije, validationdate.js también tiene una instancia de jquery. lo mismo ocurre con las DOS instancias de jquery – yuri

+0

El elemento 'script' que está escribiendo con' document.write' no se ejecutará correctamente debido a las comillas duplicadas en el atributo src. – interjay

Respuesta

12

Primero en responder a su pregunta, , incluyendo jQuery dos veces puede causar todo tipo de problemas.

Para solucionarlo, esta línea:

document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>'); 

deben ser envueltos para comprobar si jQuery ya existe en lugar de incluir a ciegas otra vez, como este:

if (typeof jQuery == 'undefined') { 
    document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>'); 
} 

Entonces, sólo se incluirá si jQuery no está ya en la página. Hay una advertencia, si está utilizando una versión de diferente de jQuery (probablemente más nueva) de la que se creó el código de validación, existe la posibilidad de que se produzcan algunas interrupciones.

+0

La parte sobre la carga doble de jQuery que causa errores, ¿es por experiencia o simplemente como un buen consejo? – ripper234

+5

@ ripper234 - ambos ... al volver a cargar jQuery, redefinirá 'window. $' Y 'window.jQuery', limpiando todos los complementos cargados previamente, por ejemplo. Ese es probablemente el síntoma más común de una doble inclusión que veo en Stack Overflow: "¿Por qué no se define mi complemento? ¡Incluí el script!" –

+0

Muy bien, estoy tratando de limpiar esto de nuestro código ... estamos cargando jQuery dos veces por algún motivo enrevesado y viendo errores en algunos complementos de jquery-ui. – ripper234

0

El uso de un marco flotante hará que jQuery para cargar dos veces si
JQuery 1) de carga para cada página (es decir, en Ruby on Rails a través application.html.erb) y
2) el iframe es también una página de su aplicación en lugar de un iframe de un sitio externo.

1

pasé horas a averiguar por qué el uso de jQuery.noConflict() no funciona como es ...

Sólo tiene que utilizar var j$ = jQuery.noConflict(); y después de que el uso j $ en lugar de $ cada vez que se utilice en ese Jquery página.

+0

o use jQuery (función ($) {}), que ajusta su función y le permite usar $ como normal –

Cuestiones relacionadas