检查dijit.form.ValidationTextBox是否在验证器中具有焦点

时间:2011-04-17 21:40:28

标签: javascript dojo

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

  

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

然而,没有提及如何检查文本框是否具有焦点。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

在您提到的文档(此处为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?)的情况。