我想提出一个有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中定义了我的对话框按钮,所以它运行方法或其他东西。
由于
答案 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,页面就开始正常工作了。