验证动态表单名称

时间:2013-09-02 00:21:00

标签: php javascript

所以我在PHP页面中使用了以下Javascript函数进行表单验证。

include ($_SERVER['DOCUMENT_ROOT'] . '/validators.php');

echo "<script Language='JavaScript' Type='text/javascript'><!--\n";
echo "function Prefix_Validator(theForm)\n";
echo "{\n";
validate_numeric('theForm', 'FieldName', 'FieldDesc');
echo "return (true);\n";
echo "}\n";
echo "//--></script>\n";
echo "\n";

这是我的表单输入的样子:

echo "</td><td>\n";
echo "<input type='text' name='txtQuantity_$DeptID' size = '3' value=''>\n";
echo "</td><td>\n";
echo "<input type='text' name='txtMemo_$DeptID' size='50' value=''>\n";
echo "</font></td></tr>\n";

现在通常情况下,如果输入的name =''部分是name ='Qty',我可以用我的java验证执行此操作:

validate_numeric('theForm', 'Qty', 'Quantity');

但由于我的表单在名称中使用了$变量,我不知道如何将它与我的Validator一起使用。这是上述验证函数的扩展部分:

function validate_numeric($formname, $fieldname, $fielddesc){

   echo "var checkOK = '0123456789';\n";
   echo "var checkStr = $formname.$fieldname.value;\n";
   echo "var allValid = true;\n";
   echo "var validGroups = true;\n";
   echo "var decPoints = 0;\n";
   echo "var allNum = '';\n";
   echo "for (i = 0;  i < checkStr.length;  i++)\n";
   echo "{\n";
   echo "ch = checkStr.charAt(i);\n";
   echo "for (j = 0;  j < checkOK.length;  j++)\n";
   echo "if (ch == checkOK.charAt(j))\n";
   echo "break;\n";
   echo "if (j == checkOK.length)\n";
   echo "{\n";
   echo "allValid = false;\n";
   echo "break;\n";
   echo "}\n";
   echo "allNum += ch;\n";
   echo "}\n";
   echo "if (!allValid)\n";
   echo "{\n";
   echo "alert('Please enter only digit characters in the $fielddesc field.');\n";
   echo "$formname.$fieldname.focus();\n";
   echo "return (false);\n";
   echo "}\n";

   return $x;
}

我试过这个,但它不起作用:

validate_numeric('theForm', 'txtQuantity_$DeptID', 'Quantity');

任何建议都会有所帮助。如果需要更多信息,请告诉我,我会尽快提供。

编辑#1

所以我尝试了你所说的dbl引号,这就是我在页面上看到的源码:

var checkOK = '0123456789';
var checkStr = theForm.txtQuantity_.value;
var allValid = true;
var validGroups = true;
var decPoints = 0;
var allNum = '';
for (i = 0;  i < checkStr.length;  i++)
{
ch = checkStr.charAt(i);
for (j = 0;  j < checkOK.length;  j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length)
{
allValid = false;
break;
}
allNum += ch;
}
if (!allValid)
{
alert('Please enter only digit characters in the Quantity field.');
theForm.txtQuantity_.focus();
return (false);
}

txtQuantity_后不应该有某种值吗?在checkStr?

我在这个页面遇到了这么多麻烦,我真的觉得它只是讨厌我,并尽其所能不起作用。

1 个答案:

答案 0 :(得分:1)

validate_numeric('theForm', 'txtQuantity_$DeptID', 'Quantity');将按字面txtQuantity_$DeptID传递。单引号不解释变量。

你必须至少将它放在这样的双引号中:

validate_numeric('theForm', "txtQuantity_$DeptID", 'Quantity');

在某些编辑中,如果你做的话,它会更清楚

validate_numeric('theForm', "txtQuantity_{$DeptID}", 'Quantity');

我还注意到你的功能echo一直向下。确保你有一个字符串,你最后return,所以你echo validate_numeric而不是把它放在那里。输出的函数难以移动/重构。当你返回时,$x完全未定义,并且可能用通知填充你的日志