2010-09-30 18 views
25

Soy muy nuevo en jQuery y trato de ejecutar un cuadro de diálogo jQueryUI bastante simple en mi aplicación PHP. En la consola de Firebug me sale el error:jQueryUI - excepción no detectada: no se pueden llamar a los métodos

uncaught exception: cannot call methods on dialog prior to initialization; attempted to call method 'open' 

Aquí está mi código:

$(function() { 
    $("#dialog").dialog({ 
     autoOpen: false, 
     show: "blind", 
     hide: "explode" 
    }); 

    $("#opener").live('click',function() { 
     $("#dialog").dialog("open"); 
     return false; 
    }); 
}); 

he hecho un poco de google en el error y no mucho aparecido, excepto que jquery.ui.js está generando el error con:

if (isMethodCall) { 
    this.each(function() { 
     var instance = $.data(this, name); 
     if (!instance) { 
      throw "cannot call methods on " + name + " prior to initialization; " + 
"attempted to call method '" + options + "'"; 
     } 
... 

¿Alguna idea? Agradezco cualquier ayuda sobre lo que es este mensaje de error y cómo resolverlo.

ACTUALIZACIÓN: Intenté comentar las opciones de mostrar/ocultar y eso no tuvo ningún efecto en mi problema. A continuación se muestra el código HTML:

<div class="demo"> 

    <div id="dialog" title="Basic dialog"> 
     <p>This is an animated dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p> 
    </div> 

    <button id="opener">Open Dialog</button> 

</div><!-- End demo --> 

Este código HTML está incluido en un archivo PHP, que se incluye en otro archivo PHP.

+1

Parece que jQuery-UI piensa que no ha inicializado el cuadro de diálogo antes de llamar a su método abierto. Quitaría las opciones algo exóticas para mostrar y ocultar que usaste, para reducir si ese es el problema. También asegúrese de tener un elemento con el id 'diálogo' en su marcado. Si eso no ayuda, tendrá que proporcionar el marcado real que está utilizando para que podamos depurarlo. – Thomas

+0

Hola Thomas, eliminé las opciones mostrar/ocultar (sin efecto) y pegué mi HTML arriba, gracias – themerlinproject

+1

Creo que tiene algo que ver con mi última frase "el HTML está incluido en un archivo PHP, que está INCLUIDO EN otro PHP archivo".He tenido problemas con jQuery y PHP includes y, como resultado, he comenzado a usar live() para hacer que las funciones estén disponibles para futuros contenidos ajax (como este div). No sé por qué no funciona aquí. – themerlinproject

Respuesta

21

OK, tenía que ver con el hecho de que estaba colocando el diálogo DIV en un archivo PHP que no se había cargado aún en el momento en que se cargó mi JS. Así que moví el DIV para el cuadro de diálogo a una página superior, y el botón funciona ahora en cualquier página de mi aplicación. Espero que esto ayude a alguien más.

+7

@ user410341 - Me alegro de que lo hayas descifrado (y feliz de poder ayudarte con el otro problema). Si lo desea, puede aceptar su propia respuesta a esta pregunta para ayudar a las personas en el futuro a encontrar respuestas rápidamente. :-) – JasCav

+0

Me pasa el mismo problema pero llamo a la función "eliminar" (esto invoca el método 'destroy'. Tiene razón para el problema, lo he solucionado agregando $ (document) .ready (function() {. ..}); alrededor de la llamada "eliminar" – gotqn

1

En mi caso, yo uso: jQuery UI - v1.9.2, y sólo tengo:

$this.sortable("destroy"); 

y me sale:

Error no detectado: no se puede llamar a los métodos en orden antes de la inicialización; trató de llamar al método 'destruir'

Y me fijo cuando se añada la validación:

if ($this.data("ui-sortable")) 
{ $this.sortable("destroy"); } 
+0

estaba luchando con otro error gracias por la sugerencia –

0

que estaba teniendo el mismo error, y el probleme era el orden del código !! debe tener su javascript después del código html :).

0

En mi caso, hubo un conflicto de JS con Mootools (Joomla clásico, ¿verdad?). Así que fui a main.js y cambió esta línea:

$(function() { 

a éste:

jQuery(function ($) { 
+0

¿Qué main.js modificó? –

+0

@AalexGabi, ya no recuerdo, pero cualquier archivo JS jQuery no debería comience con $ cuando use Mootools y jQuery juntos. Debe especificar que realmente quiere decir $ como objeto jQuery. –

Cuestiones relacionadas