不好意思打扰你了,我已经琢磨了两个小时了,问题是我的代码只添加了一个元素,而没有添加其他的id,写的是“already have”
$(function(){
$(".js-compare-add").click(function(){
var item_id = $(this).data('id');
if(Cookies.get('compare_id_list')){
var compareListStr = Cookies.get('compare_id_list');
var compareListArr = compareListStr ? compareListStr.split(',') : [];
if (compareListArr.indexOf(item_id) > -1) {
compareListArr.push(item_id);
Cookies.set('compare_id_list', compareListArr.join(','), {expires: 10});
alert('Save! ' + item_id);
} else {
alert('already have ' + item_id);
}
} else {
alert('There was no list, we created it and added this position ' + item_id);
Cookies.set('compare_id_list', item_id);
}
});
});
以防万一-我用它来做cookie https://github.com/js-cookie/js-cookie if(jQuery.inArray(item_id,compareListArr)=== -1)也没用
1条答案
按热度按时间vm0i2vca1#
Dave Newton提出了一个有用的观点,即逻辑似乎是向后的,但如果这是你试图让它工作的结果:
当你使用
data
函数时,jQuery会进行数据操作,它不会只给予你匹配的data-id
属性的字符串值。如果属性的文本都是数字,jQuery会将其转换为数字:所以
indexOf
不会在字符串数组中找到它,因为它会进行===
比较。如果ID应该是一个字符串,并且您没有使用
data
的特殊原因,请使用attr
:根据我的经验,绝大多数时候人们使用
data("x")
,他们真正想要的是attr("data-x")
。data
不只是data-*
属性的访问器,它比data-*
属性更多,也更少。或者,如果您希望ID是一个数字,请使用另一种方式:将数组中的元素转换为分割后的数字:
(The一元
+
只是解析数字的一个选项,请参阅此处的其他选项。旁注:在新代码中,我更喜欢
includes
而不是indexOf
。下面是更正了逻辑并使用includes
的if
(注意,我已经切换了if
和else
块):