2011-02-14 19 views
1

我正在檢查模糊上的一些文本框,有些需要根據相同的critera進行檢查,因此我將這些全部放在一個模糊函數中。我注意到我的頁面看起來很慢,在螢火蟲中,我一直在報錯too much recursionjquery在多個模糊函數上遞歸太多

我的代碼如下,它檢查文本框,然後將ID發送到另一個函數,該函數添加一個類來說明它是否有效。

$('#username, #customerName, #customerTown, #customerCounty, #contactName, #staffFirstname, #staffLastname, #staffTown, #staffCounty').blur(function() 
{ 
    var ID = $(this).attr('id'); 
     var val = $(this).val();      
     if(validate(val)) 
     { 
      valid(ID); 

     } 
     else 
     {    
      notValid(ID); 
     } 

}); 

function valid(elementID) 
{ 
      $('#'+elementID+'Img').html('<img src="../images/tick.png" alt="Valid" title="Valid" />'); 
      $('#' + elementID).addClass('valid'); 

} 

function notValid(elementID) 
{ 
      $('#'+elementID+'Img').html('<img src="../images/cross.png" alt="Not Valid" title="Not Valid" />'); 
      $('#' + elementID).removeClass('valid');      

} 

function validate(val) 
    { 
     var reg = new RegExp ("^([a-zA-Z ]){3,90}$"); 
     var regTest = reg.test(val); 
     if(regTest) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
} 

如果我爲每個文本框做了單獨的blur函數會更好嗎?還是有另一種方式?我真的不想爲每個文本框寫一個模糊函數。

有什麼建議嗎?謝謝。

+1

你確定它的這個代碼,導致緩慢和錯誤信息?我發現什麼都不會很慢,也沒有遞歸。 – Guffa 2011-02-14 01:23:06

+0

這基本上是我在我的頁面上的所有代碼,還有幾個文本框被檢查,但它的方式與上面相同。只有其他功能是一個onclick,但我得到錯誤之前,它被按下。謝謝。 – Elliott 2011-02-14 01:27:24

回答

2

我試了一下你的代碼,它沒有顯示任何緩慢的跡象,並且根本沒有錯誤信息,甚至在錯誤控制檯中也沒有。

http://jsfiddle.net/5sFWF/

下面是一些建議中的代碼的變化,使用單個函數來設置狀態,而不是兩個,使用jQuery創建元素,而不是粘貼在一起的HTML代碼,避免了如果真-然後-true,否則假反模式的驗證功能:

http://jsfiddle.net/5sFWF/2/