防止DevExress ASP.NET MVC SpinEdit上的关键事件

时间:2016-07-21 20:34:09

标签: c# asp.net asp.net-mvc devexpress

在表单中,我有一个旋转编辑控件,如下所示:

formLayoutSettings.Items.Add(i =>
{
    i.FieldName = "FieldA";
    i.NestedExtension().SpinEdit(s =>
    {
        s.Properties.MinValue = 1;
        s.Properties.MaxValue = 9999999999999;
        s.Properties.ValidationSettings.ErrorDisplayMode = ErrorDisplayMode.ImageWithTooltip;
        s.Properties.ClientInstanceName = "seFieldA";
        s.Properties.Increment = 10;
        s.ShowModelErrors = true;
        s.Width = Unit.Percentage(100);
        s.Properties.AllowMouseWheel = false;
        s.Properties.ClientSideEvents.KeyDown = "OnFieldAKeyDown"; // This is the event heandeler
    });
});

功能:

function OnFieldAKeyDown(s, e) {
    if (e.htmlEvent.keyCode == 38 || e.htmlEvent.keyCode == 40) {
        ASPxClientUtils.PreventEventAndBubble(e.htmlEvent); // this doesn't work
        ASPxClientUtils.PreventEvent(e.htmlEvent); // this either
    }
}

我的目标是在用户按下向上键或向下键时防止旋转编辑控件值发生变化。当我调试它时,OnFieldAKeyDown中的if测试工作但是PreventEventAndBubble和PreventEvent失败了。另外,还有其他方法可以用jquery吗?

感谢。

1 个答案:

答案 0 :(得分:1)

AFAIK,有一种解决方法可以阻止用户使用向上/向下箭头键递增/递减SpinEdit值而不使用PreventEventPreventEventAndBubble。如果JS方面没有可用的公共方法,您可以尝试在SpinEdit事件处理程序中恢复KeyDown之前的值,如下所示:

<script type="text/javascript">
function OnFieldAKeyDown(s, e) {
    if (e.htmlEvent.keyCode == 38 || e.htmlEvent.keyCode == 40) {

       // check if ASPxClientSpinEdit exists
       if (typeof ASPxClientSpinEdit !== "undefined") {
           ASPxClientSpinEdit.prototype.OnPageOrArrowKeyDown = function() {
               // when user tries either increment or decrement, it returns last value instead
               if (s.GetValue() != s.lastChangedValue) {
                   s.SetValue(s.lastChangedValue);
               }
               // if spinedit's minimum & maximum values also affected, set current limit
               else {
                   s.maxValue = ASPxClientSpinEdit.MaxValue;
                   s.minValue = ASPxClientSpinEdit.MinValue;
               }
           }
       }
    }
}
</script>

可以将此函数与jQuery结合使用,欢迎任何建议。

参考:https://www.devexpress.com/Support/Center/Question/Details/Q254514