2010-11-22 16 views
0

2つのボタンを持つjQueryダイアログボックスを表示したいと思います。ユーザは、上書き操作を続行するかどうかを決定できます。jQueryダイアログボックスページ機能で実行中のボタン機能

"いいえ"ボタンは、ダイアログウィンドウを閉じる以外は何もしません。 "Yes"ボタンは、コントローラ上のアクションメソッドへのjQueryポストコールを行う関数を呼び出す必要があります。

問題は、私のアクションメソッドがページロードで実行されているように見えて、ダイアログボックスが表示されるのを待たずにいるということです。ダイアログ

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

、ここでは、関数が

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

であり、ここに私のコントローラのコードであるためここで

は、マークアップです。

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

問題は、コントローラの編集機能がページの読み込み中に実行されていることです。

私は$(document).readyのダイアログボタンの定義を持っているので、そのメソッドや何かを実行していますか?

おかげ

答えて

0

overWriteBalanceがインライン実行され、結果はかなりOKボタンクリックで実行されているよりもOK「イベント」に割り当てられたブラケットののでoverWriteBalance

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

上のブラケットを取り外します。

+0

あなたのキッディング、私は今この間に私の髪を引っ張ってきました...ありがとう –

0

私もこの問題に遭遇しましたが、根本的な原因は自分のコードではありませんでした。この問題がある場合は、互換性のあるバージョンのjqueryとjqueryuiを使用していることを再度確認してください。

私の場合は、「ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js」と「ajax.googleapis.com/ajax/libs/jqueryui/1.8」を使用していました。 11/jquery-ui.min.js "その結果、ボタンイベントコードは、正しく定義したとしても、ページロード時に実行されていました。

jquery 1.3.2を1.5.1に置き換えたら、ページが正しく動作するようになりました。