我正在从用户创建的列表中动态添加和删除复选框。如果放在列表中的项目是一个单词,这可以正常工作,但如果它包含一个空格,那么它不起作用。我理解为什么它不起作用但却无法找到如何成功地从数组中拼接出正确的一个。
var boxCounter=0;
function addToCheckListNew(item){
var newSet = '<fieldset data-role="controlgroup" class="cbGroup' + boxCounter + '"></fieldset>';
$('.cbDiv').append(newSet);
var newBox = '<input type="checkbox" name="checkbox-' + boxCounter + '" id="checkbox-' + boxCounter + '" class="custom" /> <label for="checkbox-'+ boxCounter + '">'+item+'</label>';
$(".cbGroup" + boxCounter).append(newBox).trigger('create');
boxCounter++;
$("#new-list-page-iteminput").val("");
$("#new-list-page-itemlist").listview("refresh");
currentList.push(item);
}
//Delete the selected checkboxes
function deleteCheckedListNew(){
var checkedBoxes = $('form input:checked').parents('fieldset');
for (var i=0;i<checkedBoxes.length;i++){
var str = (checkedBoxes.text().trim());
str = str.split(" ");
var itemIndex = $.inArray(str[i],currentList);
if(itemIndex!==-1){
currentList.splice(itemIndex,1);
checkedBoxes.remove();
}
}
}
放入复选框的项目也存储在数组currentList中,我试图将其从中删除。删除复选框很好。
答案 0 :(得分:0)
我认为你根本不需要担心文本的价值。
您只需使用要从存储索引中删除的项目的显示索引即可。
这是假设你还没有内置任何排序
我把它简化为
//Delete the selected checkboxes
function deleteCheckedListNew() {
var checkedRows = $('fieldset').has(':checkbox:checked');
checkedRows.each(function(index){
currentList.splice(index, 1)
}).remove();
}
我建议的下一步是为每个项目使用一个对象数组。然后,您可以为每个ID分配唯一的ID,这比解析文本更简单。
存储ID后,您可以对列表进行排序,并使用数组filter()或其他方法轻松找到存储的对象。
该数组看起来更像
[
{id:1, text:'eat lunch'},
{id:2, text:'have a beer'}
]
然后,id也会被放到模板中的每一行上,以便在数组中轻松识别
的 DEMO 强>