2013-06-25 29 views
0

我已經設置了一些ajax代碼來驗證使用php的窗體內的多個字段。代碼就像一個魅力,但我想盡量減少使用的JavaScript。你可以在下面的代碼中看到,獲取getElements('input')...驗證所有輸入字段,然後getElements('textarea')驗證...你知道! ; o)Textarea是以下代碼中的最後一行,之後的javascript與inpt相同 Im在我的控制器中使用php驗證輸入,textarea,選擇列表,複選框等,但獲取元素後的代碼是完全相同的。阿賈克斯 - 多重驗證

所以我在想,我也許可以做一個SWITC情況下,或者其他的javascript循環的元素和只寫複製的JavaScript一次....

莫非是做???

window.addEvent('domready', function(){ 
$('container').getElements('input').addEvent('keyup', function(e){ 
    //stop the input-tag event 
    e = new Event(e).stop(); 
    //identify which item was activated 
    var querystring = this.title; 
    var value = this.value; 
    var myXHR = new XHR({ 
     method: 'get', 
     onSuccess: function(e){ 
      var myString = myXHR.response.text; 
      var myStringArray = myString.split("###RAWR###"); 
      $(myStringArray[1]).innerHTML = '<em class="checking">&nbsp;</em>'; 
      setTimeout(ajax , 3500); 
      function ajax(){ 
       $(myStringArray[1]).innerHTML = '<em class="'+myStringArray[2]+'">'+myStringArray[0]+'</em>'; 
      } 
     } 
    }); 
    myXHR.send('index2.php?option=com_component&task=validate&value='+value, querystring); 
}); 
$('container').getElements('textarea').addEvent('keyup', function(e){ 

回答

0

您可以將標記名在數組中循環,並打電話與您的驗證功能。

window.addEvent('domready', function(){ 
    var tagNames = ["input", "textarea", "select"]; 
    for (var i = 0; i < tagNames.length; i++) 
    { 
     validate(tagNames[i]); 
    } 
}); 

function validate(tag) 
{ 
    $('container').getElements(tag).addEvent('keyup', function(e){ 
     //stop the input-tag event 
     e = new Event(e).stop(); 
     //identify which item was activated 
     var querystring = this.title; 
     var value = this.value; 
     var myXHR = new XHR({ 
      method: 'get', 
      onSuccess: function(e){ 
       var myString = myXHR.response.text; 
       var myStringArray = myString.split("###RAWR###"); 
       $(myStringArray[1]).innerHTML = '<em class="checking">&nbsp;</em>'; 
       setTimeout(ajax , 3500); 
       function ajax(){ 
        $(myStringArray[1]).innerHTML = '<em class="'+myStringArray[2]+'">'+myStringArray[0]+'</em>'; 
       } 
      } 
     }); 
     myXHR.send('index2.php?option=com_component&task=validate&value='+value, querystring); 
    }); 
} 
+0

看起來很有趣。因此,我必須用名稱標記(如)來標識每個輸入字段,並使用for循環搜索名稱標記?一切,HTML以及控制器驗證保持不變? (我不是一個JavaScript專家...這段代碼花了我30個小時來執行;) – Jakob

+0

我更新了我的答案,並從標籤列表中刪除了複選框。如果你對所有輸入類型,texareas和下拉框使用相同的驗證,它應該可以工作。 – pikand