我有一个表单,只允许带有“.edu”域名的电子邮件地址,我编写了一些JavaScript来尝试实现这一目标。
表单元素:
<input type="text" name="empEmail" id="empEmail" />
<input type="submit" name="submit" id="submit" value="submit" onClick = "error();" />
<span id="empEmailError"> </span>
JavaScript函数:
//Check for non-university e-mail addresses
function error() {
var email = document.getElementById('empEmail').value;
var re = /\.edu$/;
if(!email.match(re))
{
document.getElementById('empEmailError').innerHTML = "University e-mail
address only.";
return false;
}
}
这是小提琴:
我无法让它发挥作用。不知道我错过了什么。
答案 0 :(得分:2)
答案 1 :(得分:0)
有一个问题,它没有找到error
功能。可能是它将error
函数放在document.on('loaded')
函数中或类似于jsFiddle中的函数。
所以解决方法是向window
添加一个函数,如下所示:
//Check for non-university e-mail addresses
window.validateEduAddress = function() {
var email = document.getElementById('empEmail').value;
var re = /\.edu$/;
if(!email.match(re)) {
document.getElementById('empEmailError').innerHTML = "University e-mail address only.";
return false;
} else {
console.log('woohoo');
}
}
然后在您的html中,您需要告诉onclick
使用该功能:
<input type="submit" name="submit" value="submit" id="submit" onclick="validateEduAddress();" />
为了让它更容易,继续更新jsFiddle
一般情况下,您还应该尽量避免命名函数,因此您应该尝试描述事件或功能,而不是error
或fail
。
答案 2 :(得分:0)
正如其他人所说,此问题的原因是您在jsfiddle中选择了onLoad选项,结果是您的内联onclick
处理程序无法找到您的error
函数。这部分是使用内联事件处理程序(将JavaScript直接放在属性中)的错误,这不是推荐的做法。
另一个问题是你在其中一个字符串值的中间有一个换行符,这会导致语法错误并阻止代码运行。
你应该在&lt; head&gt;&#34;中使用&#34; no wrap;选项,以及不引人注目的JavaScript。
从元素中删除onclick
属性:
<input type="submit" name="submit" id="submit" value="submit" />
并使用此:
function validate(e) {
var email = document.getElementById('empEmail').value,
re = /\.edu$/;
if (re.test(email)) {
document.getElementById('empEmailError').innerHTML =
"University e-mail address only.";
return false;
}
return true;
}
window.onload = function () {
var form = document.getElementById('submit').onclick = validate;
};
(我在这里使用re.test()
作为Amit建议,因为在这种情况下,这在语义上更有意义。)