我正在構建一個註冊表單,並且在用戶名可用時啓用提交按鈕的JavaScript部分有問題,密碼足夠複雜,並且確認密碼與第一個密碼匹配。出於某種原因,passwordStrong
始終爲false,並且passwordsMatch
始終未定義。函數退出後,全局變量的值錯誤
userNameAvailable = false
passwordStrong = false
passwordsMatch = false
submitButton = null;
function checkAvailability(name, avalabilityDiv)
{
if(name.length == 0)//this happens when a name is entered but backspaced OR the shift key is pressed (and nothing else)
{
avalabilityDiv.innerHTML = "Please enter a name"
userNameAvailable = false
}
else
{
var xmlhttp, responseText
if(window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
responseText = xmlhttp.responseText;
avalabilityDiv.innerHTML = responseText//responseText is the property of XMLHttpRequest object that holds server's response
if(responseText == "available")
userNameAvailable = true
else
userNameAvailable = false
}
}
xmlhttp.open("GET", "process.php?pName="+name,true);
xmlhttp.send();
}
}
/*
Checks if password contains at least two characters from at least two categories: letter, number, other
sets passwordStrong true if does, otherwise false
*/
function passwordStrength(pass, strengthDiv)
{
if(pass.length < 8)//check passwords length
{
strengthDiv.innerHTML = "too short!"
//passwordStrong = false
return
}
var group = [0, 0, 0, 0]
for(i = 0, c = pass.charAt(0); i < pass.length; ++i, c = pass.charAt(i))
group[typeOfChar(c)]++
var result = 0
for(var i = 0; i < group.length; i++)
if(group[i] >= 2)
result++
if(result >= 2)
{
var passwordStrong = true
strengthDiv.innerHTML = "Good."
alert("passwordStrong: "+passwordStrong)
}
else
{
//var passwordStrong = false
strengthDiv.innerHTML = "too simple!"
}
}
/*used by isPasswordStrong()*/
function typeOfChar(c)
{
var ascii = c.charCodeAt(0)
if(ascii >= 48 && ascii <= 57)//is a digit
return 0
else if(ascii >= 65 && ascii <= 90)//is upper case letter
return 1
else if(ascii >= 97 && ascii <= 122)//is lower case letter
return 2
else//is other character(e.g. grammar character)
return 3
}
/*
Checks to see if confirmation password is same as first password
sets passwordsMatch true if same, otherwise false
*/
function matchPasswords(first, second, matchDiv)
{
matchDiv.innerHTML = "first: "+first.value+" second: "+second.value+"<br />"+userNameAvailable+" "+passwordStrong+" "+passwordsMatch+" done"
if(first.value == second.value)
var passwordsMatch = true
else
var passwordsMatch = false
}
/*This always shows that passwordStrong is false*/
function output()
{
alert("From output() passwordStrong: "+passwordStrong)
}
function toggleSubmit()
{
alert("here1 passwordStrong: "+passwordStrong)
if(submitButton == null)//may be cached
submitButton = document.getElementById("submit")
if(userNameAvailable && passwordStrong && passwordsMatch)
submitButton.disabled = false
else
submitButton.disabled = true
}
即使HTML「好」。在功能退出後,顯示爲passwordStrength()
變量passwordStrong
變爲false。爲什麼?
我沒有使用JQuery。
編輯:是的,它修復了它。你們怎麼知道的?我所有的故障排除技術都沒有提供這個資源。