当DevExpress ASPxCheckBox发生变化时,请求客户端确认

时间:2014-08-28 11:38:29

标签: javascript checkbox devexpress

我试图添加一个确认对话框,让用户确认对已检查的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更改发生之前注入客户端确认对话框?

1 个答案:

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