在表单中,我有一个旋转编辑控件,如下所示:
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吗?
感谢。
答案 0 :(得分:1)
AFAIK,有一种解决方法可以阻止用户使用向上/向下箭头键递增/递减SpinEdit
值而不使用PreventEvent
或PreventEventAndBubble
。如果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