我有一个带有输入字段的表单,是这样生成的
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/