评估功能有问题

时间:2009-09-03 12:29:35

标签: javascript

您好我在此代码中遇到了一个奇怪的错误:

 function validateForm(aform) {
  var s="";

  //check if form has validator arr
  if (aform.validatorArr)  {
    //Iterate over Form elements
    for (var i=0;i<aform.validatorArr.length;i++)  {
      eval("var anelem=document.forms."+aform.name+"."+aform.validatorArr[i][1]);
      var pattern=getPatternByName(aform.validatorArr[i][2]);

      if (aform.validatorArr[i][4]=="radio") {
        var fv="";

        eval("var chkArray=aform."+aform.validatorArr[i][1]+";");

        for (j=0;j<chkArray.length;j++)  {
          if (chkArray[j].checked) {
            fv=chkArray[j].value;
          }
        }

        if (validateValue(fv,pattern)==false)  {
          s+=aform.validatorArr[i][3]+"\n";
        }

      } else {
        if (validateField(anelem,pattern)==false)  {
          s+=aform.validatorArr[i][3]+"\n";
        }
      }
    }

    //Report errors
    if (s!="") {
      alert(s);
      return false;
    }

  }

  return true;
}
元素列表后

缺少] 第217行

这是第217行:

 eval("var anelem=document.forms."+aform.name+"."+aform.validatorArr[i][1]);

任何想法都是错的?

更新

这就是de函数的调用方式:submitForm('formbuilder_form'); 这与表单名称相同:

    <form name="formbuilder_form" method="POST" action="processform.php" style="margin:0px">

问题已解决

在表单元素的onw中,有人认为这样做很好:

Js不喜欢这个。

感谢您帮助所有人。

3 个答案:

答案 0 :(得分:2)

无需使用 eval 。试试这个:

var anelem = document.forms[aform.name][aform.validatorArr[i][1]];

答案 1 :(得分:2)

你为什么这样做? 你应该这样做:

var anelem=document.forms[aform.name][aform.validatorArr[i][1]];

但是从更新的帖子中可以看出,aform是一个字符串 - 而不是一个对象。所以你应该先得到一个对象。

aform=ocument.forms[aform]

答案 2 :(得分:2)

对于所有JavaScript对象,

forms.fishforms['fish']相同。因此,您可以使用[]来获取一个属性,该属性的名称存储在对象的字符串中,而不是邪恶的eval

最重要的提示:如果你发现自己曾经使用eval,那么你可能犯了一个错误。

  

“document.forms。” + aform.name

特别滑稽,因为您正在尝试获取表单对象的name并访问具有该名称的表单 - 这与您开始使用的表单对象相同!

然而:

  

submitForm( 'formbuilder_form')

是否使用eval或[]是错误的:您将字符串传递给submitForm而不是表单对象。字符串没有name属性。

让commitForm与普通表单提交过程分开是混乱的,并打破非JavaScript UA。如果你写:

<form method="post" action="processform.php" onsubmit="return submitForm(this);">
   ...
</form>

然后函数中的'aform'将成为表单对象,您可以像以下一样访问元素:

var anelem= aform[aform.validatorArr[i][1]];

无需担心document.forms脚本提交按钮或表单名称。虽然,为了避免表单属性上的名称冲突,这是更好的:

var anelem= aform.elements[aform.validatorArr[i][1]];