php - 验证可能不存在的字段

标签 php javascript html

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

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;
                }
        }

最佳答案

如果您尝试引用 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;
    }
}

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

或者,您可以将 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"),然后在循环中测试每个元素的类。

关于php - 验证可能不存在的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18056274/

相关文章:

javascript - 如何更改元素的类以获得我想要的结果?

javascript - 正则表达式替换列表中的 0 但不是 10、20、30 等中的 0 - 使用 js 替换

javascript - 如何重置输入字段?查询

html - 是否可以在 ruby​​mine 中格式化/回流 html?

php - 按时间戳对 MySQL 表进行排序

php - 重新加载方法: Complete Ajax Solutions

php - 计算子串出现次数并返回分数

javascript - 单击容器内部时下拉菜单关闭

php - Wordpress 管理菜单指向主题文件

javascript - Semantic-ui 弹出 z-index?