2010-11-05 59 views
16

Esta es mi htmlfunción listo jQuery se llama dos veces

<div id="projekt" style="position: relative; width: 90%;height:400px;"/> 

$("#projekt").ready(function() { 

    .. do something with the div 
}); 

El problema es la función de lista se llama dos veces. Cuál podría ser la razón ?

+0

¿Puede mostrar el código HTML?¿Hay una buena posibilidad de que agregue esto dos veces o incluso haciendo referencia a jQuery más de una vez? – hunter

+0

¿Podría tener dos elementos con 'id = 'projekt''? – Spudley

+0

Sí, he hecho referencia a jQuery dos veces. Pero solo hay un elemento script con jquery. Cuando elimino este elemento, ambas referencias jQuery desaparecen. Extraño. – user137348

Respuesta

10

Hay a bug which can cause this. Intenta actualizar o vincular el documento en lugar de div.

+1

+1 - El error 1.4.3 es la causa más probable, ya que el selector no importa ... puede hacer '$ (" # IDJFmliiojfasdfll "). Ready()' y funcionará :) –

+2

I intenté actualizar a 1.4.4rc2 y el error persistió. Estoy usando $ (document) .ready() ... – nornagon

+5

Urgh, encontré cuál era el problema: mi función ready estaba lanzando una excepción ... que causó que el manejador listo no registrara que el evento listo ya había sido manejado . Ver http://bugs.jquery.com/ticket/7273 – nornagon

0

La forma correcta de invocar ready() es para document:

$(document).ready(function() { 
    ... 
}); 
+0

$(). Ready (controlador) es [equivalente] (http://api.jquery.com/ready/) pero no recomendado. ¿Por qué no se recomienda? – Grastveit

0

que tenían el mismo problema. Se fue cuando moví mi JS a otro archivo y lo incluí en la etiqueta principal en lugar de debajo del div en el que estaba trabajando.

1

He visto esto suceder cuando tengo una alerta ('...'); en algún lugar dentro de la devolución de llamada. Esto sucede tan recientemente como jQuery 1.5.2. Quitar la alerta hace que el código solo se ejecute una vez.

1

No hay necesidad de añadir opción de aplicación a la siguiente etiqueta en config/application.rb config.action_view.javascript_expansions [: ORIGINAL] =% w (aplicación jquery)

Se llamará applcation.js dos veces, por lo las funciones también se ejecutan dos veces en su aplicación

11

Si incluye su archivo javascript dos veces, se ejecutará dos veces. Esto no aparece claramente en firebug. El panel script (donde fui a depurar el problema de javascript) solo mostrará el archivo una vez en el menú desplegable. Pero si mira en los paneles html o net, puede ver si hay múltiples.

que tenían algo como:

<script src="/scripts/project.js" type="text/javascript"></script> 
<script src="/scripts/project.js" type="text/javascript"></script> 

(Esto es similar a @chs respuesta, pero no es específico de los carriles.)

+0

Esta fue la causa de que mi función "lista" se disparara dos veces. Había incluido el archivo js una vez en el "diseño" de tiles-template ... -Y, había * nuevamente * incluido el mismo archivo a través de la definición de azulejos "add-attribute". ¡Gracias! – sairn

2

he encontrado una solución a este problema.

Debe utilizar este código

$(document).bind("ready", MyDocumentReadyHandler) 

en lugar del código

$(document).ready(...); 

Puede leer más acerca de la función "listo" el uso de este url.

0

Se encontrará con el mismo problema al usar JQM(jQueryMobile), pero el problema en mi caso era tener atributos duplicados de data-role="content". Ese atributo desencadena el procesamiento de todo dentro del div o elemento particular con ese atributo. En mi caso, una función .ready se envolvió dos veces con ella y, por lo tanto, se ejecutó dos veces. Espero que ayude a alguien.

0

si tiene un src incorrecto en un iframe como <iframe src="../" ...></iframe>, la función ready() se ejecutará dos veces. Asegúrate de tener una URL válida.

Ej .:

<iframe src="../something.html" ... ></iframe> 
Cuestiones relacionadas