我正在尝试添加一个确认对话框,让用户确认对 ASPxCheckBox 的选中状态所做的更改。
服用1个
基于这个 DevExpress 支持中心问题我正在尝试以下代码:
<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
位能够阻止这种改变,但它仍然发生了。我已经检查了控制台记录的参数,看看是否可以影响其中的任何内容,但看起来不像。我还阅读了 CheckedChanged
DevExpress 文档,但它也没有说明我的目的。
服用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
发生更改之前注入客户端确认对话框?
您无法阻止
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);}
}
聚会有点晚了,但我在后面的代码中使用 ClientSideEvents.ValueChanged 属性解决了类似的问题。
背后代码:
var chkNormal = new ASPxCheckBox{ID = someID};
chkNormal.ClientSideEvents.ValueChanged = "() => Change()";
JavaScript:
function Change() {
// Do something
}