2011-04-17 53 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

相關問題