2010-02-18 3 views
1

Tout d'abord j'ai lu les messages pertinents ici sur Stackoverflow mais je suis toujours coincé.jQuery - appliquer des gestionnaires aux éléments chargés après chargement de la page par un plugin

J'ai une page qui charge des données en utilisant un plugin de grille personnalisé. Ces données doivent avoir un lien qui va lancer une fenêtre modale (en utilisant le plugin jqModal). La fenêtre est présente dans le HTML, non récupérée par un appel ajax. Donc, si j'attache le gestionnaire d'événements à un lien présent dans la page html, cela fonctionne très bien. Si je l'applique à un lien créé par ce plugin de grille, cela ne fonctionne pas.

qui suit travaillera sur les liens déjà présents dans le code HTML, mais pas sur les liens générés par le plug-in:

$(function() {  
var Foo = $('#Foo'); 
Foo.jqm({trigger: 'a.bar'}); 
}); 

Je pense que je comprends pourquoi cela est cependant je ne peux pas résoudre le problème. live ne le coupe pas en tant qu'événement qui devrait être attaché c'est charge, pas de clic ou tout autre événement autorisé par jQuery 1.3.2 (ne peut pas utiliser la version 1.4). J'ai pensé que bind pourrait être la réponse, mais je ne peux pas le faire fonctionner et je suis à peu près sûr que c'est juste moi qui ne l'obtiens pas.

Toutes les suggestions appréciées que j'ai déjà martelé ma tête sur cela pendant trop longtemps.

Oh, un exemple de quelque chose que je fait figure comment faire avec les données chargées dynamiquement:

$('body').click(function(event) { 
      if ($(event.target).is('a.bar')) { 
       $(event.target).toggleClass('baz'); 
      } 
}); 

Cela va ajouter avec succès la classe « baz » le lien dynamiquement chargé « a.someLink » sur un clic (je pensais pouvoir ajouter la classe de déclenchement aux liens de cette manière mais je n'arrive pas à comprendre comment le faire en charge par opposition au clic) mais le lien ne déclenchera pas la fenêtre modale et je ne sais pas pourquoi .

EDIT: J'ajoute un rappel dans le plugin de grille personnalisée, mais pour le moment je suit pour faire avancer les choses de travail:

$('.someclass').animate({opacity: 1}, 2000, function(){ 
      Foo.jqm({trigger: 'a.bar'}); 
}); 

hackish mais il fait le tour dans un pincement.

Répondre

1

Vous avez besoin d'une sorte de rappel qui s'exécute lorsque le contenu dynamique est chargé.

si JQM est jQueryModal, je crois qu'il ya un rappel onLoad:

$('#dialog').jqm({ 
    onLoad:function() { 
     // content is loaded? 
     console.log(!!$('.bar').length); // true if .bar exists 
    } 
}); 
+0

Le rappel onLoad est déclenchée après que le contenu ajax est chargé. Dans mon cas, le contenu modal n'est pas chargé via ajax (le contenu de la grille est mais pas le modal), il est déjà présent dans la page afin que cela ne soit pas déclenché. – Stuart

1

vous pouvez créer une fonction, puis l'appeler pendant l'appel ajax après le chargement des choses.

function setEvent() 
{ 
var Foo = $('#Foo'); 
Foo.jqm({trigger: 'a.bar'}); 
}; 

et dans la ajax

success: function(msg) 
      { 
       Loadstuff(msg); 
       setEvent(); 
      }, 
Questions connexes