For循环错误,需要帮助解决
for loop bug, help needed to resolve
我有这个。click函数,在那里我将检索cookie信息(其中包含3个索引与多个元素)
例子供你参考我的意思
array= {name:"sam"姓:"tan"} {name:"jam"姓:"man"} {姓名:"gam"姓:"wan"}
所以我通过解析它到一个变量来调用它然后我创建了另一个新变量,并做一个if, else函数来过滤元素到新的数组中,因为我的。click函数是检查人们修改他们的名字/姓氏,然后按下更新按钮,这就是为什么我在听。click,我的代码很多,所以我只拿它的一部分用于参考目的
$('#update').click(function(){
clickedProfile.surname = $("input[name=contact-surname]").val();
clickedProfile.name = $("input[name=contact-name]").val();
clickedProfile.gender = $("input[name=contact-gender]").val();
$("#contact-surname").text('Surname is ' + $("input[name=contact-surname]").val());
$("#contact-name").text('Name is ' + $("input[name=contact-name]").val());
$("#contact-gender").text('Gender is ' + $("input[name=contact-gender]").val());
var c = JSON.parse($.cookie('cookiecontact'));
var d = [];
for(var i = 0; i < c.length; i++)
{
if(globalID == i)
{
d.push(clickedProfile); // in array, for that element it will store in the updated value
}
else
{
d.push(c[i]); // push in remaining non affected indexes into array
}
}
d.sort(function(a, b){
return a.name.localeCompare(b.name)
});
$.cookie('cookiecontact', JSON.stringify(d));
console.log($.cookie('cookiecontact'));
});
我将为我的目的解释代码
clickedProfile.surname = $("input[name=contact-surname]").val();
clickedProfile.name = $("input[name=contact-name]").val();
clickedProfile.gender = $("input[name=contact-gender]").val();
我在另一个函数上声明了clickProfile,它将附加LI列表的唯一ID,因此,如果我的单击是在第一个LI上,clickProfile将附加LI ID = 0,它链接到数组[0]元素。
对于for循环,如果LI被点击if语句将运行将更新后的代码推送到联系人数组
的索引元素上如果它与我所单击的globalID不匹配,它将继续将其余的索引元素推入var D。
当我刷新页面获取更新后的列表时,
example:起始是我的主li表单只显示联系人数组
中每个索引的名称值山姆果酱我第一次尝试将Sam更改为zam时,它运行良好输出
果酱第二次我尝试将zam更改为CAM时,它将开始表现奇怪的输出
并且在第三次尝试更改jam以禁止之后,它将变成禁止
禁止禁止我不知道是什么原因导致这个,因为它似乎改变了一个额外的索引后,每次我按下更新。
到目前为止,我对函数的逻辑是- 从cookie中检索值(cookie有3个预设元素字符串)
- 过滤器放入一个新的变量,如果全局id ==匹配,则放更新信息在该元素中,同时推入其余加载的元素元素
- 按字母顺序排序
- 存储到cookie
- 转到另一个页面并返回检查更新的列表
我认为我的逻辑是好的到目前为止,但不确定我做错了。请指出我的错误,谢谢!
这个数组排序算法可能是罪魁祸首。
d.sort(function(a, b){
return a.name.localeCompare(b.name)
});
当您按名称排序数组时,您的数组索引不再与您的globalID匹配。然后,下次点击时,cookie数组中的错误项将被替换。
这是一个工作版本在http://jsfiddle.net/F8RvB/:
var clickedProfile = {};
var globalID = 0;
var cookieContact = [{ name:"one" ,surname:"oner", gender:"male", id:0 }, { name:"two", surname:"twoer", gender: "male", id:1 }, { name:"three", surname:"threer" , gender: "male", id:2}];
$('#update').click(function(){
clickedProfile.surname = $("input[name=contact-surname]").val();
clickedProfile.name = $("input[name=contact-name]").val();
clickedProfile.gender = $("input[name=contact-gender]").val();
clickedProfile.id = globalID;
$("#contact-surname").text('Surname is ' + $("input[name=contact-surname]").val());
$("#contact-name").text('Name is ' + $("input[name=contact-name]").val());
$("#contact-gender").text('Gender is ' + $("input[name=contact-gender]").val());
var c = cookieContact;
var d = [];
for(var i = 0; i < c.length; i++)
{
if(globalID == i)
{
d.push(clickedProfile); // in array, for that element it will store in the updated value
}
else
{
d.push(c[i]); // push in remaining non affected indexes into array
}
}
d.sort(function(a, b){
return a.id > b.id;
});
cookieContact = d;
console.log(cookieContact);
});
为了简单起见,我删除了cookie函数,并将其替换为硬编码的pojo数组。不确定为什么要对数组进行排序…在这里的工作示例中,您可以完全删除排序。否则,当您从cookie中获取数据以供以后使用时,您应该考虑排序,或者根据排序后的数组索引更新您的globalID。
- 我根据解决方案按类对
- 元素进行分组,但需要帮助了解它的工作原理
- 我需要帮助来解决一个小问题
- Knockoutjs+Ckeditor需要帮助解决一些问题
- 需要帮助解决“;总计“;围栏价格计算器的按钮
- javascript中的btoa()可以帮助我解决哪些安全威胁
- node.js nodeschool learnyounode需要帮助理解解决方案的代码
- java脚本我需要帮助来解决一个问题
- 我正在使用JQUERY灯箱,我帮助我解决简单的问题
- 了解使用AngularJS承诺,他们将如何帮助解决这个问题
- 解决可能的严格违规行为(并帮助蝙蝠侠拯救哥谭)
- 移动隐藏菜单适用于jsfiddle,但不适用于在线.任何解决方案都会有所帮助
- 需要帮助来解决滑块 JavaScript 与 Safari 的冲突
- 需要 PHP 中 jQuery 滑块的帮助来解决每个问题
- 可以帮助我解决鼠标事件
- 需要帮助来解决我的Java问题
- JS说我有一个未定义的对象.真的需要一些帮助来解决这个问题吗
- For循环错误,需要帮助解决
- 帮助需要解决jslint错误
- 需要帮助解决模态弹出问题
- 由于Node的异步特性,需要帮助解决问题