2010-11-22 7 views
0

Je souhaite lever une boîte de dialogue jQuery dotée de 2 boutons. Alors que l'utilisateur peut décider de continuer avec l'opération d'écrasement ou non.Boîte de dialogue jQuery Fonction du bouton s'exécutant au chargement de la page

Un bouton, le bouton "non" ne devrait rien faire sauf fermer la fenêtre de dialogue. Le bouton "Oui" devrait appeler une fonction qui fait un appel post jQuery à une méthode d'action sur mon contrôleur.

Le problème est que ma méthode d'action semble être exécutée au chargement de la page, n'attendant pas que la boîte de dialogue s'affiche même.

Voici le balisage pour la boîte de dialogue

<div id="dialog" title="My Dialog Box"> 
     <p> 
      Ballance Already Exsists. Do you wish to overwrite?</p> 
    </div> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#dialog").dialog({ bgiframe: true, autoOpen: false, modal: true, buttons: { 'OK': overWriteBalance(), 'NO': $(this).dialog('close') } 
      }); 
     }); 

    </script> 

et voici les fonctions

balanceCheckPost = function (data) { 
     $("#existCheck").val(data); 
     if (data) { 
      // Does Exist 
      $("#existCheck").val("Exist"); 
      // raise confirmation popup 


      $('#dialog').dialog("open"); 

     } 
     else { 
      // Does Not Exist 
      $("#existCheck").val("NOT Exist"); 

      // insert Item 
      var balance = {}; 
      balance.date = $("#bal_Date").val(); 
      balance.amount = $("#bal_Amount").val(); 
      $.post("balance/insert", 
       balance, 
       confirmChange 
       ); 
     } 

    }; 



    function overWriteBalance() { 
     // insert Item 
     var balance = {}; 
     balance.date = $("#bal_Date").val(); 
     balance.amount = $("#bal_Amount").val(); 
     $.post("balance/edit", 
       balance, 
       confirmChange 
       ); 
    }; 

et est le code ici dans mon contrôleur.

public void edit(Balance bal) 
    { 
     var dataContext = new DataDataContext(); 
     var balToEdit = dataContext.Balances.Single(b => b.Date == bal.Date); 
     balToEdit.Amount = bal.Amount; 
     dataContext.SubmitChanges(); 
    } 

Le problème est que la fonction d'édition de mon contrôleur s'exécute au chargement de la page.

Est-ce parce que j'ai la définition de mes boutons de dialogue dans $ (document) .ready, donc c'est l'exécution de la méthode ou quelque chose.

Merci

Répondre

0

Retirez les crochets sur overWriteBalance

$(document).ready(function() { 
     $("#dialog").dialog({ bgiframe: true, autoOpen: false, modal: true, buttons: { 'OK': overWriteBalance, 'NO': $(this).dialog('close') } 
     }); 
    }); 

En raison des supports overWriteBalance est exécuté en ligne et le résultat attribué à la « événement » OK plutôt que d'être exécuté sur le clic de bouton OK.

+0

Votre blague, je me suis arraché les cheveux pendant un moment maintenant ... Merci –

0

Je viens de rencontrer ce problème aussi - mais la cause première n'était pas mon code, c'était mon inclusion. Si vous voyez ce problème, vérifiez que vous utilisez des versions compatibles de jquery et jqueryui.

Dans mon cas, j'utilisais "ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" et "ajax.googleapis.com/ajax/libs/jqueryui/1.8. 11/jquery-ui.min.js ". Le résultat était que le code d'événement de bouton était en cours d'exécution lors du chargement de la page, même si je l'avais défini correctement.

Dès que j'ai remplacé jquery 1.3.2 par 1.5.1, la page a commencé à fonctionner correctement.

Questions connexes