Javascript Dijit ValidationTextBox:是否显示invalidMessage,取决于用户先做什么

Javascript Dijit ValidationTextBox:是否显示invalidMessage,取决于用户先做什么,javascript,validation,dojo,Javascript,Validation,Dojo,我已经定义了一个dijit.form.ValidationTextBox: var nameBox = new ValidationTextBox({ style: 'width: 300px;', trim: true, required: true, regExp: '.{5,50}', invalidMessage: 'Name is required and must be between 5 and 50 characters', val

我已经定义了一个
dijit.form.ValidationTextBox

var nameBox = new ValidationTextBox({
    style: 'width: 300px;',
    trim: true,
    required: true,
    regExp: '.{5,50}',
    invalidMessage: 'Name is required and must be between 5 and 50 characters',
    value: dto.name
}, 'name')
但是验证工作并不像我预期的那样有效。如果我进入该字段,输入3个字符并离开,我会收到给定的消息。当我清除字段后记时,我仍然收到相同的消息

但是,当我第一次聚焦该字段并将其保留为空时,我会收到以下消息:

此值是必需的

之后,当我输入3个字符时,我有相同的标准消息,而不是我给出的自定义消息


似乎发出的第一条错误消息在小部件上被“卡住”。这是某种错误,还是我对某些东西有误解?我使用的是Dojo 1.9.2invalidaMessage仅用于不满足正则表达式条件的验证问题。 对于“required=true”条件,使用单独的“missingMessage”属性。当required设置为true时,如果字段保留为空,则必须将此属性设置为显示

var nameBox = new ValidationTextBox({
    style: 'width: 300px;',
    trim: true,
    required: true,
    regExp: '.{5,50}',
    invalidMessage: 'Name is required and must be between 5 and 50 characters',
    missingMessage: 'Name is required and must be between 5 and 50 characters',
    value: dto.name
}, 'name')

这将解决问题。

是的,问题已经解决,但我是否理解正确,不可能有不同的missingMessage和invalidMessage?因为第一次触发的消息将被显示,而不是当前状态,这适用于当前状态?我们可以有不同的MissigMessage和invalidMessage。但如果required为true,则丢失的消息将具有更高的优先级。因此,一旦写入数据,将进行验证检查,其中invalidMessage将用于失败案例。如果您只看到ValidationTextBox.js的源代码,您将看到这是他们遵循的顺序。如果需要,您可以为此编写自己的重写验证程序/验证器方法。(查看如何构建自定义dojo小部件)。问题是,即使小部件不是空的,也会显示missingMessage。这很奇怪。可能是DOM的一些错误。你在另一个浏览器上试过了吗?你们在控制台上看到什么了吗?实际上,如果没有给出某些信息,“thisvalueisrequired”是默认消息。所以,你得到了它,因为它被设置为真。但它仅在字段为空时显示。否则将验证正则表达式并显示无效消息。(如果未提供invalidMessage,则默认情况下也采用“此值是必需的”)。