2010-05-13 69 views
4

這裏是我的問題,我已經在正在實施jQuery.Autocomplete和jQuery.validate,所有除非我在自動完成列表中單擊一個元素正常工作,將其選中一個表單輸入元素。使用jQuery自動完成與驗證的onblur計時問題

會發生什麼是自動完成設置它的值之前發生了驗證。由於在onBlur上進行了驗證,並且您只需單擊自動填充列表中的某個項目,就會在輸入填充其新值之前的一秒鐘內進行模糊觸發和驗證。

我不會介意的雙重驗證,如果它是客戶端,但我發生在這一領域要執行昂貴的遠程AJAX驗證,所以我真的很想解決這個問題的正確途徑。

我首先想到的是代理的所有驗證的onblur事件通過一個函數,超時10毫秒後,基本上翻轉假摔事件順序。但是,我想認爲,這意味着撕毀jQuery.Validate.js代碼,我寧願不這樣做。

任何想法?

回答

4

我能得到這個工作,但也許不那麼優雅,我所希望的。理想情況下,我希望在超時關閉內調用onfocusout的原型或默認版本,但我無法弄清楚如何從該範圍引用它。

我採取的卻是來超越它的代碼複製/粘貼到超時封閉的onfocusout在方法的方法。唯一的其他調整是將此引用更改爲_this以在超時關閉的不同範圍內工作。

$("#aspnetForm").validate({ 
     success: "valid", 
     onkeyup: "false", 
     onfocusout: 
      function(element) { 
       //Delay validation so autocomplete can fill field. 
       var _this = this; 
       setTimeout(function() { 
        if (!_this.checkable(element) && (element.name in _this.submitted || !_this.optional(element))) 
         _this.element(element); 
        _this = null; 
       }, 250); 
      } 
    }); 

隨意發佈改進。

+0

Sweeeeeeeeeet! – CFNinja 2010-08-11 19:52:11