jQuery对话框在页面加载时运行的按钮功能

时间:2010-11-22 10:19:10

标签: asp.net-mvc jquery-ui

我想提出一个有2个按钮的jQuery对话框。这样用户可以决定是否继续进行覆盖操作。

一个按钮,“否”按钮除了关闭对话窗口外什么也不做。 “是”按钮应调用一个函数,该函数对我的控制器上的操作方法进行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中定义了我的对话框按钮,所以它运行方法或其他东西。

由于

2 个答案:

答案 0 :(得分:0)

删除overWriteBalance

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

由于括号overWriteBalance正在内联执行,结果分配给OK'事件'而不是在OK按钮上执行单击。

答案 1 :(得分: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”。结果是按钮事件代码正在页面加载时执行,即使我已正确定义它。

一旦我用1.5.1替换jquery 1.3.2,页面就开始正常工作了。