2010-11-22 20 views
0

Ich möchte eine jQuery-Dialogbox mit zwei Schaltflächen aufrufen. Damit kann der Benutzer entscheiden, mit dem Überschreiben fortzufahren oder nicht.jQuery Dialogfeld Schaltflächenfunktion beim Laden der Seite

Ein Knopf, die "Nein" -Taste sollte nichts außer dem Schließen des Dialogfensters tun. Die "Ja" -Schaltfläche sollte eine Funktion aufrufen, die einen jQuery-Post-Aufruf an eine Aktionsmethode auf meinem Controller macht.

Das Problem ist, dass meine Aktionsmethode scheinbar beim Laden der Seite ausgeführt wird und nicht darauf wartet, dass das Dialogfeld überhaupt angezeigt wird. Hier

ist das Markup für den Dialog

<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> 

und hier sind die Funktionen

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 
       ); 
    }; 

und hier ist der Code in meinem Controller.

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(); 
    } 

Das Problem ist, dass die Editierfunktion in meinem Controller auf Seite Last runing.

Liegt daran, dass ich die Definition meiner Dialogschaltflächen in $ (document) .ready habe, also läuft die Methode oder so etwas.

Dank

Antwort

0

Entfernen Sie die Klammern auf overWriteBalance

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

Wegen der Klammern overWriteBalance inline und zum OK ‚Ereignis‘ zugeordnet Ergebnis ausgeführt wird, anstatt auf die Schaltfläche OK klicken ausgeführt wird.

+0

Ihr Scherz, ich habe mir schon eine Weile die Haare rausgerissen ... Danke –

0

Ich habe gerade dieses Problem auch - aber die Ursache war nicht mein Code, es war meine umfasst. Wenn dieses Problem auftritt, überprüfen Sie, ob Sie kompatible Versionen von jquery und jqueryui verwenden. In meinem Fall verwendete ich "ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" und "ajax.googleapis.com/ajax/libs/jqueryui/1.8". 11/jquery-ui.min.js ". Das Ergebnis war, dass der Button-Event-Code beim Laden der Seite ausgeführt wurde, selbst wenn ich ihn richtig definiert hatte.

Sobald ich Jquery 1.3.2 mit 1.5.1 ersetzt, begann die Seite korrekt zu funktionieren.

Verwandte Themen