我想为dijit.form.ValidationTextBox写一个自定义的Valadiator。不幸的是,每种类型都会在发生ontype事件时调用dijit.form.ValidationTextBox.validator。为了解决这个问题,文档建议:


  这里有一个小问题:此验证器将称为onType,这意味着它将在每次按键时将请求发送到后端。如果您不希望发生这种情况,则可能需要在开始时添加另一个检查,以便在验证文本框处于焦点位置时始终返回true。


但是,不要完全提及如何检查和查看文本框是否具有焦点。

有什么建议吗?

最佳答案

在您提到的文档(可在此处找到http://dojotoolkit.org/reference-guide/dijit/form/ValidationTextBox-tricks.html#dijit-form-validationtextbox-tricks)中,它们提到创建自定义验证功能。尝试将以下检查添加到函数的开头:

dijit.byId("validationTextBoxNodeId").validator = function (value, constraints) {
    if(document.activeElement.id == "validationTextBoxNodeId") return true; //don't check while typing
    // Check that email has not been used yet.
    if (some-checks) {
        return true;
    } else {
        return false;
    }
}


或者,如果您没有为验证文本框分配诸如“ validationTextBoxNodeId”之类的手动ID,而是以编程方式创建所有内容(以我的经验,这是最可能的情况):

new dijit.form.ValidationTextBox({
    name:"email",
    //insert other properties like value, required or invalidMessage here
    validator: function() {
        if(this.id == document.activeElement.id) return true; //don't check while typing
        //real checks go here
        if (some-checks) {
            return true;
        } else {
            return false;
        }
    }
});


注意,由于验证功能在其范围内起作用,因此您无需显式引用该框的ID。如果需要,您可以在第一个示例中使用dojo.hitch()完成相同的操作。

另外,请注意,这仅在目标浏览器支持document.activeElement(Which browsers support document.activeElement?)时有效。

10-08 19:04