Désolé de vous déranger, mais j'ai passé deux heures à essayer de comprendre cela. Le problème est que mon code n'ajoute qu'un seul élément, mais aucun autre identifiant, il dit "existe déjà"
$(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); } }); });
Juste au cas où - je l'utilise pour les cookies https://github.com/js-cookie/js-cookie if (jQuery.inArray(item_id,compareListArr) === -1) n'aide pas non plus
Dave Newton a fait valoir un point utile , la logique semble inversée, mais si c'est ce que vous obtenez si vous essayez de le faire fonctionner :
Lorsque vous utilisez la valeur de chaîne
data
函数时,jQuery 会进行数据操作,它不仅仅为您提供匹配的data-id
de l'attribut. Si le texte de l'attribut est entièrement numérique, jQuery le convertira en nombre :