使用FrontPage制作校园教学网站时出现indexOf未定义错误求助
解决FrontPage教学网站的JavaScript验证错误
你遇到的「行:28 字符:1 错误:indexOf属性的值为null或未定义,不是对象/函数」问题,根源很明确——你的JavaScript代码里错误地直接调用了indexOf、substring这些字符串方法,没有绑定到具体的字符串实例上。在浏览器的全局作用域里,这些方法并不是直接可用的全局函数,必须通过字符串对象来调用。
具体问题点和修复方案
下面是你的代码里需要修正的核心问题:
- JavaScript的
indexOf是字符串的实例方法,正确语法是字符串.indexOf(查找值),而非你写的indexOf(查找值, 字符串) substring同样是字符串实例方法,需要通过具体字符串调用length是字符串的属性,不是函数,不能写成length(字符串),要写成字符串.length
修复后的完整验证代码
function verif() { // 建议明确获取表单对象,避免全局变量f未定义的问题 var f = document.forms['你的表单名称']; var a = f.T1.value; var b = f.T2.value; var c = f.T3.value; var lettres = /^[A-Za-z]+$/; var chiffres = /^[0-9]+$/; var lett = a.charAt(0) + a.charAt(1); var chiff = a.charAt(2) + a.charAt(3); if (!(lett.match(lettres)) && !(chiff.match(chiffres))) { alert("2 premier lettres alphabet et 2 autres chiffres"); return false; } if (!(b.match(lettres)) || b == "") { alert("chaine alphabetique non vide"); return false; } if (!(c.match(lettres)) || c == "") { alert("chaine alphabetique non vide 2"); return false; } var d = f.T4.value; // 修正indexOf调用方式 if (d.indexOf('@') == -1) { alert("email invalid"); return false; } v1 = d.indexOf('@'); // 修正substring调用,基于d字符串截取 ch = d.substring(0, v1 - 1); if (!(isNaN(ch))) { alert("email invalid"); return false; } // 修正indexOf调用 if (d.indexOf('.') == -1) { alert("email invalid"); return false; } // 修正indexOf调用,基于ch字符串 p2 = ch.indexOf('.'); // 修正substring和length的使用 ch1 = ch.substring(p2 + 1, ch.length - 1); if (!(isNaN(ch1))) { alert("email invalid"); return false; } p3 = d.indexOf('@'); p4 = d.indexOf('.'); // 修正substring调用 v1 = d.substring(p3 + 1, p4 - 1); if (!(isNaN(v1))) { alert("email invalid"); return false; } }
额外注意事项
- 代码里的
f变量需要确保是正确的表单对象,如果你的表单name属性不是f,要把document.forms['你的表单名称']里的名称改成实际的表单name值,避免出现f未定义的新错误。 - 你的邮箱验证逻辑比较基础,只能做简单的格式检查,如果需要更严谨的验证,可以考虑使用更完善的正则表达式,但当前先解决indexOf的错误即可。
内容的提问来源于stack exchange,提问作者user5964692
相关产品推荐
相关产品推荐

