如何只验证一个复选框?

时间:2011-11-18 18:27:14

标签: javascript

我正在处理来自名为gvalidator的开源库中的一段代码。以下复选框验证功能仅在我有两个或更多复选框时才有效。由于某些原因,当元素在数组中只有1个对象时,if(elements [i] checked)行没有返回true。

任何人都猜到为什么会这样?谢谢!

this.validate = function() {
    // Check if the form has a value set for this checkbox
    // by cycling through all of the checkboxes
    var elements = document.forms[0].elements[this.field.name];

    if(undefined == elements.length){
         x = elements;
        elements = new Array(x);
    }
    for (i = 0; i < elements.length; i++) {
      if (elements[i].checked) {
        document.write(elements[i].name);
        this.setState(ONEGEEK.forms.FIELD_STATUS_OK);
        return true;
      } else {
        if (this.modified !== true || !this.isRequired) {
          this.setState(ONEGEEK.forms.FIELD_STATUS_INFO);
        } else {
          this.setState(ONEGEEK.forms.FIELD_STATUS_EMPTY);
        }
      }
    }
    return false;
};

2 个答案:

答案 0 :(得分:0)

您的代码中存在一些严重的错误和一些小错误。它应该是这样的。测试此代码并告诉我它是否仍然无效并在错误控制台中提供任何错误消息。

this.validate = function () {
  // Check if the form has a value set for this checkbox
  // by cycling through all of the checkboxes
  var elements = document.forms[0].elements[this.field.name];
  if (elements.length === undefined) {
      elements = [ elements ];
  }

  for (var i = 0, ii = elements.length; i < ii; ++i) {
    if (elements[i].checked) {
      document.write(elements[i].name);
      this.setState(ONEGEEK.forms.FIELD_STATUS_OK);
      return true;
    } else {
      if (this.modified !== true || !this.isRequired) {
        this.setState(ONEGEEK.forms.FIELD_STATUS_INFO);
      } else {
        this.setState(ONEGEEK.forms.FIELD_STATUS_EMPTY);
      }
    }
  }
  return false;
};

答案 1 :(得分:0)

Jan是对的......差不多。函数验证中需要以下内容,因为form.elements函数不会总是返回一个数组 - 在只有1个匹配的情况下返回一个元素:

// Check if the form has a value set for this checkbox
// by cycling through all of the checkboxes
var elements = document.forms[0].elements[this.field.name];
if (elements.length === undefined) {
    elements = [ elements ];
}

设置功能中,在首先添加验证事件之前,还需要它:

this.setup = function() {
   ...
   // Add events to ALL of the items      
   var elements = document.forms[0].elements[this.field.name];
   if (elements.length === undefined) {
       elements = [ elements ];
   }
   for (i = 0; i < elements.length; i++) {
       _du.addEvent(elements[i], 'click', this.applyFieldValidation(this));
       _du.addEvent(elements[i], 'click', this.applyContextInformation(this));
       _du.addEvent(elements[i], 'change', this.applyFieldModification(this));
   }
}

我已更新了代码http://code.google.com/p/gvalidator/的源代码,最新的二进制文件可在此处下载:http://code.google.com/p/gvalidator/downloads/list