我正在尝试使用我已保存在Cookie中的详细信息填充表单。
每个cookie都有12位信息,由'---'
分隔我正在尝试确保用户名(用户输入的值)与其中一个Cookie的用户名(username1)匹配。
我该怎么做?
底部的if循环总是用cookie数组中的最后一个索引填充
function populateForm(username){
var allcookies = document.cookie;
// Get all the cookies pairs in an array
cookiearray = allcookies.split(';');
// Now take key value pair out of this array
for(var i=0; i<cookiearray.length; i++){
username1 = cookiearray[i].split('---')[0];
password = cookiearray[i].split('---')[1];
email = cookiearray[i].split('---')[2];
name_one = cookiearray[i].split('---')[3];
name_two = cookiearray[i].split('---')[4];
addr1 = cookiearray[i].split('---')[5];
addr2 = cookiearray[i].split('---')[6];
city = cookiearray[i].split('---')[7];
zip = cookiearray[i].split('---')[8];
day = cookiearray[i].split('---')[9];
month = cookiearray[i].split('---')[10];
year = cookiearray[i].split('---')[11];
var nameinarray = cookiearray[i].split('---')[0];
var cityinarray = cookiearray[i].split('---')[7];
if(nameinarray.indexOf(username.value)){
document.getElementById('username_text').value=nameinarray;
document.getElementById('city_text').value=cityinarray;
alert("in loop " + username.value);
}
}
}
答案 0 :(得分:1)
这是因为如果在 this 字符串中找不到参数,indexOf()
函数将返回-1
。在许多编程语言中,包括JavaScript,-1
被视为truthy值,因此,如果在if-test中使用,将导致分支被执行。
解决方案:
if (nameinarray.indexOf(username.value) !== -1) {
对您的代码的其他评论:
indexOf()
的使用。你不应该想要完全平等,即if (username1 === username.value) {
?但是对于你使用我不知道的indexOf()
可能有一个解释;随意在评论中添加它。cookiearray[i].split('---')
;这浪费了CPU。计算一次,将其分配给变量,然后在12个赋值语句中重复索引该变量。username1
和nameinarray
。同样适用于city
和cityinarray
。