http://jsfiddle.net/4px4whk0/
我有两个问题
首次点击checkbox
(a)时,第一个console.log
应打印带有空data-selected-list
属性的dom,我不知道为什么填充我点击的内容([" a"])?
我必须设置超时换行container.attr('data-selected-list', selectedList);
然后它就像我想要的那样工作。
点击其他checkbox
(b)时,我希望["a","b"]
存储在属性中。但它只存储["b"]
,为什么?
我希望它可以通过html属性中的商店数据来解决,不仅存储在jquery data
api
$(document).ready(function() {
$('.container').on('click', 'input[type="checkbox"]', function() {
var container = $(this).closest('.container');
var input = $(this);
console.log(container);
var selectedList = container.data('selected-list');
if (selectedList == '') {
selectedList = [];
}
if (input.is(":checked")) {
selectedList.push(input.val());
}
console.log(selectedList);
selectedList = JSON.stringify(selectedList);
container.attr('data-selected-list', selectedList);
});
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="container" data-selected-list="">
<input type="checkbox" value="a">a
<input type="checkbox" value="b">b
<input type="checkbox" value="c">c
</div>
&#13;
答案 0 :(得分:2)
你有几个错误:
console.log
调用移至 attr
和data
。这些做了两件事。 attr
将数据存储在DOM中,data
是一个jquery方法,用于将数据存储在jquery本身的某个位置。attr
,则需要先执行JSON.stringify
序列化数组,然后再将其存储(您确实正确执行),但是当您从DOM中提取数据时将其转换回JSON.parse
attr
为未定义的DOM标记返回undefined
,而不是空字符串修复这些问题的正确解决方案是:
$(document).ready(function() {
var container = $('.container');
container.on('click', 'input[type="checkbox"]', function() {
var input = $(this);
console.log(container);
var selectedList = container.attr('data-selected-list');
if (!selectedList) {
selectedList = [];
}else{
selectedList = JSON.parse(selectedList);
}
console.log(selectedList);
if (input.is(":checked")) {
selectedList.push(input.val());
}
selectedList = JSON.stringify(selectedList);
container.attr('data-selected-list', selectedList);
});
});
这是一个小提琴:http://jsfiddle.net/yLz6uv1q/