我试图添加一个确认对话框,让用户确认对已检查的ASPxCheckBox状态的更改。
取1
根据{{3}}我尝试以下代码:
<dx:ASPxCheckBox ID="ASPxCheckBox1" runat="server">
<ClientSideEvents CheckedChanged="ConfirmChange" />
</dx:ASPxCheckBox>
使用此JavaScript:
function ConfirmChange (s, e) {
console.log(s);
console.log(e);
return false; // For testing
// return confirm(); // Should become this
}
我希望/期望return false
位阻止更改,但它仍然会发生。我已经浏览了控制台记录的参数,看看我是否可以影响那里的任何东西,但看起来并不像。我也读过this DevExpress support center question,但它也不清楚我的目的。
拿2
我也尝试在代码背后执行此操作:
var checkbox = (ASPxCheckBox)myGridView.FindEditRowCellTemplateControl(myCol, "ASPxCheckBox1";
checkbox.Attributes.Add("onclick", "return confirm('You sure?')")
这也会弹出确认对话框,如果单击取消,则无法阻止更改。
取3
最后,根据这里早期答案中的一个建议,我还尝试了验证路线:
<dx:ASPxCheckBox ID="ASPxCheckBox1" runat="server">
<ClientSideEvents Validation="ConfirmChange" />
</dx:ASPxCheckBox>
JavaScript的:
function ConfirmChange (s, e) {
e.isValid = confirm();
}
但是,这并不会阻止或还原更改,但如果您在确认对话框中点击取消,则会显示验证错误。
所以,底线
如何在ASPxCheckBox
更改发生之前注入客户端确认对话框?
答案 0 :(得分:2)
您无法阻止ASPxClientCheckBox.CheckedChanged
事件中的更改,因为当编辑器的状态已更改时,客户端会发生此事件。您可以使用ASPxClientCheckBox.GetChecked
方法和ASPxClientCheckBox.SetChecked
方法恢复价值
这是一个例子:
<dx:ASPxCheckBox ID="ASPxCheckBox1" runat="server">
<ClientSideEvents CheckedChanged="ConfirmChange" />
</dx:ASPxCheckBox>
JavaScript的:
function ConfirmChange (s, e) {
console.log(s);
console.log(e);
//Save the checked state
value = s.GetChecked();
//Revert changes immediately
s.SetChecked(!s.GetChecked());
result = false; // For testing
// result = confirm(); // Should become this
if (result) {s.SetChecked(value);}
}