2009-08-28 5 views
0

J'espère que quelqu'un peut pointer un newbie relatif jQuery/jqModal dans la bonne direction pour le débogage de cette erreur. Je charge un fragment html dans un div puis j'utilise jqModal pour afficher ce div comme une boîte de dialogue modale. Le problème est que la div est affichée mais pas avec mon HTML mis à jour.Problème jqModal/JQuery, div ne pas mettre à jour avec un nouveau contenu?

Je montre mon dialogue jqModal dans la réponse d'un appel jquery, la fonction foo est appelée à partir d'un événement onclick:

function foo(url) 
{ 
    $.ajax({ 
     type: "GET", 
     url: url, 
     success: function(msg) 
     { 
      $('#ajaxmodal').html(msg); 
      $('#ajaxmodal').jqmShow(); 
     } 
    }); 
} 

ajaxmodal est un simple div. Initialement, je pensais que le problème devait être dans le snippet html (msg) Je passe au rappel, mais je ne pense pas que ce soit, je reçois l'erreur (voir ci-dessous), même si je commente le $ ('#ajaxmodal'). html (msg) ligne ou passer le code HTML html. Je pense avoir jqModal configuré correctement, d'autres appels utilisant notre div ajaxmodal fonctionnent correctement, je suis capable d'afficher le modal, mettre à jour le contenu basé sur la réponse du serveur, etc

Lorsque j'essaie de déboguer dans firebug, je reçois l'erreur suivante suite à l'appel à .jqmShow(). J'ai vu l'erreur à l'occasion dans d'autres endroits où il semblait que la page n'avait pas encore été chargée, et j'avoue que je suis confus à ce sujet, puisque nous avons enveloppé nos sélecteurs jqModal dans un $ (document) .ready() appel, alors peut-être que j'ai un problème plus important que cet appel arrive juste à déclencher?

à partir du fichier jquery.jqModal.js, ligne 64: js err est $ (': entrée: visible', hw) [0] est indéfini dans la ligne:

f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}} 

Quand je marche par ceci dans firefox, hw [0] semble correct, il fait référence à notre div #ajaxmodal.

Merci d'avance pour toute suggestion dans le suivi de cette baisse?

Répondre

0

Je ne suis pas familier avec jqModal, mais vous pourriez vouloir essayer

append() 

Plutôt que

html() 

Je ne sais pas si cela va aider, mais il vaut le coup

+0

Salut Chris, merci. J'ai déjà essayé, mais en vain. – echoesofspring

0

J'ai trouvé une solution à mon problème, affichant le résultat au cas où cela aiderait quelqu'un d'autre, même si je ne le comprends pas très bien.

Le problème (je pense) a quelque chose à voir avec ajaxmodal n'étant pas tout à fait initializel en tant qu'élément jqModal quand je fais l'appel .html(). L'appel de .jqmShow initialise la div avec notre texte par défaut. Je pensais mettre ce dans le document fonction prêt était suffisante pour initialiser la boîte de dialogue:

$('#ajaxmodal').jqm({ajax: '@href', trigger: 'a[rel*=modal]', ajaxText: 'Loading...'}); 

mais pour résoudre mon problème, je devais inverser les appels:

$('#ajaxmodal').jqmShow(); 
$('#ajaxmodal').html(msg); 
+0

Très intéressant, je dois aimer ces problèmes de cycle de vie! –

0

Cette question est un peu vieux côté, mais c'était l'un des seuls résultats que j'ai pu trouver sur Google pour une situation similaire, alors je pensais partager mon expérience.

La ligne en question dans jqModal tente de concentrer le premier élément d'entrée trouvé dans votre formulaire contextuel, et s'il n'y en a pas, une exception est levée. C'est pourquoi il est dans le bloc d'exception - rien ne se passe mal si vous désactivez firebug.

Cependant, si vous êtes comme moi et trouvez des erreurs bouillonnant pour être un peu ennuyeux, une solution de contournement consiste à ajouter un élément d'entrée fictif à l'élément sur lequel vous exécutez jqmShow.

2

Si vous avez pas d'entrée il faudra se concentrer, vous pouvez changer dans les jqModal.js de:

f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}}, 

à:

f=function(h){try{}catch(_){}}, 

C'est ce que je l'ai fait quand même;)