我有一个带有inputfield的表单,我就是这样生成的
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;
}
}
答案 0 :(得分:2)
使用这样的try-catch语句:
try {
//your code
} catch(e) {
//if it gets here your code had a problem (the input does not exist)
}
答案 1 :(得分: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;
}
}
显然,如果需要,您可以对其他字段应用类似的测试。
或者,您可以向需要该特定验证的所有输入添加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")
然后测试循环中每个类的类。