【问题标题】:EXT JS: How to enforce the MaxLength to false at run time?EXT JS:如何在运行时强制 MaxLength 为 false?
【发布时间】:2014-02-16 05:04:31
【问题描述】:

我正在处理文本字段并使用 enforceMaxLength 配置限制最大长度。

所以,作为一个用例 - 我限制用户只能输入 14 个字符。但是,一旦使用 this.setRawValue(Ext.util.Format.currency(this.getValue())); 设置值,我的文本字段就会附加 .00 和美元符号

所以,设置值后,文本字段的总长度变为 18,并且总是给出最大长度违规错误消息。

有什么方法可以避免错误消息,但仍然限制用户只能输入 14 个字符?我正在尝试清除 maxLength 文本,但找不到这样做的方法或解决方法。

任何指针都会有所帮助。

【问题讨论】:

  • jsfiddle 上的所有代码都会对我们有所帮助。

标签: javascript html extjs extjs4


【解决方案1】:

您可以覆盖textfieldvalidator 函数,并在应用格式时调用textfield.validate()

http://jsfiddle.net/FcXrL/1/

这是一个概念证明,您需要更新正则表达式。

现在,如果您可以编写一个好的正则表达式并让它在一行中进行验证,您总是可以使用VType。只需确保在设置货币时调用textfield.validate(),因为使用 util 格式更改文本不会导致验证函数运行。

更新

所以我到处搜索了一种内置的方法,但这是我能得到的最好的方法。
我们要做的是在textfield 上捕获keypress 事件,并测试我们有多少个字符。如果我们超过阈值(在这种情况下为 14),我们只需 .setValue() 使用当前输入的子字符串。

http://jsfiddle.net/vYu4G/5/

在这个小提琴中,我将textfield 分解为它自己的变量,这样我就可以轻松地完成.on()。如果你使用 MVC,你可以在你的控制器中监听 keypress 事件。

另外注意没有enforceMaxLengthmaxLength配置,我添加了enableKeyEvents配置。

【讨论】:

  • 你好 Lmmo。谢谢你的帮助。很抱歉混淆,但我的问题是关于“如何清除 MaxLength 文本属性?”我想要的是'文本字段应该阻止用户输入 x' 字符,但如果验证失败,则不会触发任何消息。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多