0

我有一个像这样生成的带有输入字段的表单

if (strpos($text, "[Objekt]") !== false) {
?>
<input type = "text" name = "objekt" value = "" /><br/>
<?php
}

现在我想尝试使用 javascript 验证这一点,但是一旦 js 遇到一个不存在的字段,它就会停止工作,是否有解决方案可以绕过这个

这是我的js

            function isNumber(n) {
            return !isNaN(parseFloat(n)) && isFinite(n);
        }
        function validate() {
                if ((!isNumber(document.form1.test.value)) ||
                        (!isNumber(document.form1.bezahlt.value)) ||
                        (!isNumber(document.form1.differenz.value)) ||
                        (!isNumber(document.form1.saeumzuschlag.value)) ||
                        (!isNumber(document.form1.mahngebuehr.value)) ||
                        (!isNumber(document.form1.gesamtsumme.value))) {
                    alert("error");
                    return false;
                } else {
                    return true;
                }
        }
4

2 回答 2

2

使用这样的 try-catch 语句:

try {
//your code
} catch(e) {
//if it gets here your code had a problem (the input does not exist)
}
于 2013-08-05T10:52:40.153 回答
2

如果您尝试引用document.form1.objekt并且它不存在,您将得到undefined,并且尝试引用undefined.value会给您一个错误。您可以使用以下方法测试该字段是否存在:

 if (document.form1.objekt) {
     // exists, so do something with document.form1.objekt.value
 }

有几种方法可以将未定义的测试插入现有的验证代码,例如:

if (!(document.form1.objekt==undefined || isNumber(document.form1.objekt.value))) { ...

在上下文中:

function validate() {
    if (!(document.form1.objekt==undefined || isNumber(document.form1.objekt.value)) ||
            (!isNumber(document.form1.test.value)) ||
            (!isNumber(document.form1.bezahlt.value)) ||
            (!isNumber(document.form1.differenz.value)) ||
            (!isNumber(document.form1.saeumzuschlag.value)) ||
            (!isNumber(document.form1.mahngebuehr.value)) ||
            (!isNumber(document.form1.gesamtsumme.value))) {
        alert("error");
        return false;
    } else {
        return true;
    }
}

显然,如果需要,您可以对其他字段应用类似的测试。

或者,您可以将 a 添加class="numeric"到需要特定验证的所有输入中,然后在您的 JS 中选择具有该类的所有输入并将它们传递给isNumber()循环。那么页面中包含哪些特定字段就无关紧要了。

更新:要实现我的最后一个建议,请确保所有数字字段都有class="numeric",然后执行以下操作:

function validate() {
    var numFields = document.querySelectorAll("input.numeric");
    for (var i=0; i < numFields.length; i++) {
        if (!isNumber(numFields[i].value)){
            alert(numFields[i].name + " is invalid");
            return false;
        }
    }
    return true;
}

如果您需要支持旧版本的 IE(比 v8 更早),您将无法使用.querySelectorAll(),您需要做一些其他事情 - 例如,使用document.getElementsByTagName("input")然后测试循环中每个类的类。

于 2013-08-05T11:15:58.900 回答