2010-06-18 9 views
0

J'ai une boîte de dialogue jquery ui et à l'intérieur j'en ai une autre
et avant d'ouvrir celui à l'intérieur, j'appelle $.get pour recevoir le code html pour qu'il

si j'ouvre la première boîte de dialogue et fermez-le puis ouvrez à nouveau et essayez d'ouvrir la boîte de dialogue à l'intérieur du code html reçu de $ .get ne soit pas mis


page1

<script type="text/javascript"> 
     $(function() { 
      $("#bidialog").dialog({ 
       resizable: true, 
       height: 500, 
       width: 700, 
       modal: true, 
       autoOpen: false, 
       buttons: { 'Anuleaza': function() { $(this).dialog('close'); } } 
      }); 
     }); 

     function openit() { 
      $.get('<%=Url.Action("Index", "Bank") %>', function(data) { $("#bidialog").html(data); }) 
      $("#bidialog").dialog('open'); 
     } 

     $(function() { $("#bopen").click(openit); }); 

    </script> 

    <div id="bidialog" title="the dialog"> 
     first content 
    </div> 
    <button id="bopen"> 
     openit</button> 


page2

<script type="text/javascript"> 
    $(function() { 
     $("#bcdialog").dialog({ 
      resizable: true, 
      height: 400, 
      width: 600, 
      modal: true, 
      autoOpen: false, 
      buttons: { 'Anuleaza': function() { $(this).dialog('close'); } } 
     }); 
    }); 

    $(function() { 
     $("#create").click(createBank); 
    }); 

    function createBank() {   
     $.get('<%=Url.Action("Create", "Bank") %>', function(data) { $("#bcdialog").html(data); }) 
     $('#bcdialog').dialog('open'); 
    } 


</script> 

<div id="bcdialog" style="display:none;" title="create bank"> 
    first content 
</div> 

<button class="ui-state-default ui-corner-all" id="create"> 
    <span class="ui-icon ui-icon-circle-plus fl"></span>Adauga</button> 
+0

désolé pas assez près pour aller ici, nous avons besoin de plus de code. – redsquare

+0

@redsquare J'ai édité ma question, maintenant c'est tout – Omu

Répondre

1

Si page2 est en cours de chargement sur le document prêt - au cours du premier get: '<% = Url.Action ("indice", "Banque")%>' - via ajax, le document. les méthodes prêtes de page2 ne seraient jamais appelées (puisque le document est déjà prêt). FYI - Passer une fonction à jQuery $ (function() {}); est le même que $ (document) .ready (function() {}); Pour obtenir l'exécution de ce code, supprimez simplement le wrapper jQuery car le code sera exécuté lorsqu'il est chargé dans le dom via l'appel ajax.

Vous pouvez envelopper le tout dans une fonction anonyme si vous avez besoin d'encapsulation:

 
(function() { 
    $("#bcdialog").dialog({ 
     resizable: true, 
     height: 400, 
     width: 600, 
     modal: true, 
     autoOpen: false, 
     buttons: { 'Anuleaza': function() { $(this).dialog('close'); } } 
    }); 

    $("#create").click(createBank); 

    function createBank() {   
     $.get('', function(data) { $("#bcdialog").html(data); }) 
     $('#bcdialog').dialog('open'); 
    } 
}); 

De plus, pas sûr de la situation dans son ensemble, mais vous voudrez peut-être envisager d'utiliser les « live » des événements jQuery depuis ils se lient vaguement aux sélecteurs et fonctionnent même si les éléments sont supprimés et ensuite ajoutés à la dom.

 
$("#create").live("click" createBank); 
+0

l'acte fait vraiment mince fait vraiment bizarre, quand je fermais le popup à l'intérieur j'ai dû le fermer 3 fois avant de le fermer, mais en enlevant le wrapper de jquery pour le document prêt sur la page2 (qui est chargé via ajax) aidé – Omu

+0

Un appel à vivre devrait être fait qu'une seule fois. Si vous appelez continuellement une méthode pour attacher des événements, alors vivre n'est pas un bon choix. Vous devez d'abord appeler "mourir" pour supprimer l'événement en direct (sans blague). – jhorback

Questions connexes