<script>
window.onload = function()
{
document.getElementById('btn').disabled=true;
function bar()
{
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var d=document.getElementById('uid').value;
if( re.test(d))
document.getElementById('btn').disabled=false;
}
};
</script>
<button type="button" id="btn" >Log-in</button>
<label for="uid">User Id</label><input type="text" name="uid" id="uid" onKeyUp="return bar()" />
我正在尝试检查在文本框uid
中输入的电子邮件ID是否格式正确,如果给定的电子邮件ID与表达式匹配,则只会启用btn
按钮。当我执行以下任何操作时,即使电子邮件ID格式正确,按钮也会保持禁用状态。帮助!
答案 0 :(得分:1)
您有范围问题。 bar()
函数在window.onload
函数中定义,因此无法从您尝试调用它的位置访问(内联onkeyup
处理程序)。
将该功能移至全局范围:
function bar() {
...
}
window.onload = function () {
document.getElementById('btn').disabled = true;
};
或者更好的是,将事件附加到window.onload
中并完全删除内联onkeyup
。
function bar() {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var d = document.getElementById('uid').value;
document.getElementById('btn').disabled = !re.test(d);
}
window.onload = function () {
var btn = document.getElementById('btn').disabled = true;
document.getElementById("uid").onkeyup = bar;
};
使用这种方式,bar
可以在onload
或全局范围内定义,两者都可以。另外,我更改了bar()
中的逻辑。如果您键入有效的电子邮件,它现在将重新禁用,然后使其无效。