我有一个检查电子邮件和用户名的javascript页面,这在除Internet Explorer之外的每个浏览器中都能正常工作。应该隐藏显示错误的div框,除非给出错误,例如用户名或无效的电子邮件。
如果电子邮件收到错误,则显示在div标签中,但不适用于用户名(在所有浏览器中)
下面是我的代码:
<script type="text/javascript">
var usernameok;
var emailok;
function checksubmit()
{
if (usernameok && emailok) {
document.getElementById("button").disabled = false;
} else {
document.getElementById("button").disabled = true;
}
}
function username(username)
{
make_request();
function stateck()
{
if (httpxml.readyState == 4) {
if (httpxml.responseText.indexOf("Username Ok") >= 0) {
usernameok = true;
} else {
usernameok = false;
}
checkCanSubmit();
}
}
httpxml.onreadystatechange = stateck;
user_url = "check_username.php?username=" + username.value;
httpxml.open("GET", user_url, true);
httpxml.send(null);
}
function email(email)
{
make_request();
function stateck()
{
if (httpxml.readyState == 4) {
if (httpxml.responseText.indexOf("Email Ok") >= 0) {
emailok = true;
} else {
emailok = false;
}
checkCanSubmit();
}
}
httpxml.onreadystatechange = stateck;
email_url = "check_email.php?email=" + email.value;
httpxml.open("GET", email_url, true);
httpxml.send(null);
}
</script>
答案 0 :(得分:0)
我看到你的函数stateck()是来自HTTP请求的返回函数。但是,您在另一个函数中定义它。不是作为匿名函数,而是作为另一个函数中的函数。
我看到你现在在做什么......好吧,试试这个:
httpxml.onreadystatechange = function()
{
if (httpxml.readyState == 4) {
if (httpxml.responseText.indexOf("Email Ok") >= 0) {
document.getElementById("email").style.backgroundColor = "green";
document.getElementById("email").style.color = "white";
document.getElementById("email_div").style.display = 'none';
emailok = true;
} else {
document.getElementById("email").style.backgroundColor = "red";
document.getElementById("email_div").innerHTML=httpxml.responseText;
emailok = false;
}
checkCanSubmit();
}
};
答案 1 :(得分:0)
您是否需要将初始状态设置为display:none?我认为IE可能会以非0高度初始化div,而div在其他浏览器中可能在技术上可见但是太短而无法看到。
编辑:
好吧,我想我误解了你的问题。你的问题不是隐藏div,而是显示用户名的错误。
没有任何明显的事情发生在我身上。尝试使用VS或VWDE逐步执行代码: http://www.berniecode.com/blog/2007/03/08/how-to-debug-javascript-with-visual-web-developer-express/