Javascript - 使用数组迭代字段?

时间:2011-05-19 20:20:24

标签: javascript

我有一个表单,并希望验证它包含的一些字段是否有条目。

因此我有以下内容:

        var requiredFields = array(
                                'Delivery_first_name',
                                'Delivery_last_name',
                                'Delivery_address',
                                'Delivery_city',
                                'Delivery_zip',
                                'Delivery_phone'
        );
        for(var field in requiredFields)
        {
            if(document.ezpay.field.value.length == 0)
            {
                document.ezpay.field.style.cssText = 'background:red;';
            }
        }

然而它似乎没有起作用。我的想法是field“的if(document.ezpay.field.value.length == 0)部分没有被评估。

换句话说,语句正在执行if(document.ezpay.field.value.length == 0)而不是if(document.ezpay.Delivery_first_name.value.length == 0).

任何人都可以证实这种信念,更重要的是能给我一些关于上述原因无效的指导吗?

上述目标是遍历已定义的字段,并为任何空白字段将CSS样式背景设置为红色。

谢谢! :)

5 个答案:

答案 0 :(得分:1)

首先,您不应该使用for...in迭代数组,因为该构造用于枚举对象属性。

其次,当您想要访问名称包含在名为field的变量中的属性时,您尝试访问名为field的属性。尝试:

for (var i = 0, j = requiredFields.length; i < j; i++)
{
    if (document.ezpay[requiredFields[i]].value.length == 0)
    {
        document.ezpay[requiredFields[i]].style.cssText = 'background:red;';
    }
}

答案 1 :(得分:0)

只需将输入字段设置为具有相同的名称&amp; id属性和使用:

if(document.getElementById(field).value.length == 0)
{
    document.getElementById(field).style.cssText = 'background:red;';
}

答案 2 :(得分:0)

也许:

document.ezpay[field].value.length

我不确定js会在使用点表示法时评估你的field字符串。

答案 3 :(得分:0)

NickFitz有正确的想法

以下是我在普通JS中的表现

var requiredFields = ['Delivery_first_name',
                      'Delivery_last_name',
                      'Delivery_address',
                      'Delivery_city',
                      'Delivery_zip',
                      'Delivery_phone'];

function validate(theForm) {    
  for(var i=0,n=requiredFields.length;i<n;i++) {
    var field = theForm[requiredFields[i]]; 
    if (field.value.length == 0) {
      field.style.backgroundColor ="red";
      return false;
    }
    else field.style.backgroundColor ="white";
  }
  return true; // allow submit
}
window.onload=function(){
  document.forms[0].onsubmit=function() { return validate(this);}
}

如果您希望所有空字段变为红色,请执行此操作

function validate(theForm) { 
  var isOk = true;   
  for(var i=0,n=requiredFields.length;i<n;i++) {
    var field = theForm[requiredFields[i]]; 
    if (field.value.length == 0) {
      field.style.backgroundColor ="red";
      isOk=false;
    }
    else field.style.backgroundColor ="white";
  }
  return isOk; // allow or disallow submit
}

答案 4 :(得分:-1)

嗯...尝试为字段

指定属性“id”
<input type="text" name="FIELDNAME" id="FIELDNAME" />

然后你可以使用

for(var field in requiredFields){
    var elem = document.getElementById(field);
    if(elem.value == '') {
       //your proccess
    }
}

或者你可以尝试使用jquery和jquery验证...更容易和可定制..