2011-04-17 51 views
0

我想为dijit.form.ValidationTextBox编写自定义valadiator。不幸的是,dijit.form.ValidationTextBox.validator被称为每种类型的ontype事件发生。为了解决这个问题,文档建议:检查dijit.form.ValidationTextBox是否在验证程序中有确认

这里有一个小的catch:这个验证器将被调用onType,这意味着它将在每个关键笔划发送请求到后端。如果您不希望发生这种情况,您可能需要在开始时添加另一个检查,以便在验证文本框处于焦点时始终返回true

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

有什么建议吗?

回答

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; 
    } 
} 

或者,如果你并没有使用手动ID,如“validationTextBoxNodeId”来验证文本框,并以编程方式创建的一切(有,在我的经验,得到了更可能的情况):

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?)。

+0

肖恩很好的回答。恕我直言,做这种类型的检查背后的概念,IAW的文件是不是很好的思想和肖恩的dojo.hitch(或dojo.connect)的建议是现货。您对验证触发器有更多的控制权,尽管您必须执行更多的手工操作,并且还必须验证表单提交。 – 2012-01-04 04:59:00

相关问题