2010-01-28 61 views

回答

4

下面是一个例子功能:

function valid(array) { 
    if(typeof array != 'object' || array.length < 1) return false; // some basic error checking 
    var errors = []; 
    var alen = array.length; 
    for(var a = 0; a < alen; a++) { 
     if(array[ a ].value.length < 1) errors.push(array[ a ]); 
    } 
    if(errors.length >= 1) return errors; 
    return true; 
} 

用法:

function submitForm() { 
    var inputs = document.getElementsByTagName('input'); 

    var errors = valid(inputs); 
    if(errors) { 
     var elen = errors.length; 
     for(var e = 0; e < elen; e++) { 
      errors[ e ].className = "error"; 
     } 
     event.preventDefault(); 
     return false; 
    } 
} 

var form = document.getElementById('myForm').onsubmit = submitForm; 

如果您使用的是框架,这会更容易。

+0

一个小的错字,在设置错误类时应该是'errors [e] .className =“error”;',我也会推荐使用正常的'for'或'while'循环代替'for。 ..in'语句迭代数组... – CMS 2010-01-28 06:16:28

+0

@CMS,更正了所有的错误,并且我将'for ... in' in's更改为'for's,但是我不确定为什么你更喜欢那个'for ... in'。 – 2010-01-28 06:29:54

+1

'for ... in'语句应该用于迭代对象属性,不建议用于数组,因为它在原型链中上升,并且如果某些东西扩展了本地的'Array.prototype'对象(一些类似MooTools的库做这些),那些属性也会迭代,另一点是迭代的顺序不能保证,所以元素可能不会以其数字顺序访问。更多信息:https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Statements/For...in#section_4 – CMS 2010-01-28 06:51:17