使用从元素 id 的变量构建的数组分离和附加复选框选择

Posted

技术标签:

【中文标题】使用从元素 id 的变量构建的数组分离和附加复选框选择【英文标题】:Detach and append on checkbox selection, using array built from variables of element ids 【发布时间】:2018-05-30 05:58:28 【问题描述】:

分离工作正常,但不附加。我认为数组是正确的,但是当再次追加时,数组是未定义的。此外,如果多次未选中,我将需要避免将相同的元素添加到数组中。

JSFiddle:https://jsfiddle.net/ud2opLxx/4/

$(document).ready(function()
var restoreMe = [];
 $("#studentCourses :checkbox").change(function() 

    var courseid = $(this).attr('id'),
        row = $(this).closest('tr'),
        cell = row.children('td').eq(3),
        course = cell.find('input');

    if($(this).prop("checked")) 
        //var rm = $.grep(restoreMe, function(e) return e.courseid.to_string == courseid.to_string; );
        row.css('color', '#000000');
        restoreMe[courseid].appendTo( cell ); 
        //rm[0].courseid.appendTo( cell ); 
     else 
        row.css('color', '#c0c0c0');
        restoreMe.push(courseid: course.detach());
        
);
);

【问题讨论】:

【参考方案1】:

restoreMe.push(courseid: course.detach()); 将新字典添加到列表中,而不是字典中的新条目。

将其更改为restoreMe[courseid] = course.detach();,因为它按预期工作。

【讨论】:

这正是我在 JSFiddle 中所做的,就在您发布之前。谢谢。【参考方案2】:

您的代码存在一个根本问题,即 restoreMe 是一个数组而不是 javascript 对象。将其设置为数组会使搜索项目变得困难(您需要循环访问),并且还可能生成重复条目(因为没有检查键)。

但是,对象可以构造为键值对,使键在整个对象中唯一。由于这些元素具有唯一的 ID,因此在对象中创建条目并从中检索会容易得多。

以下是我在您的代码中更改的部分:

...

var restoreMe = ;

...

restoreMe[courseid].appendTo( cell ); 

...

restoreMe[courseid] = course.detach();

最后,查看working fiddle。

【讨论】:

闪电般的快速响应!谢谢你。我也尝试过以这种方式构建阵列,然后注意到您的回复。它现在可以工作,但我不必将方括号换成花括号。 restoreMe=[] 与 restoreMe[coursed] = course.detach();【参考方案3】:

我替换了数组推送,它现在可以工作了: restoreMe[courseid] = course.detach();

【讨论】:

以上是关于使用从元素 id 的变量构建的数组分离和附加复选框选择的主要内容,如果未能解决你的问题,请参考以下文章

angularJs获取复选框中id 进行批量删除

输入复选框元素的双向数据绑定

如何从数组动态创建复选框列表?

散列更改时分离和重新附加元素

从 SQL 查询结果构建父/子数组菜单结构

Laravel 根据枢轴额外字段从枢轴附加/分离模型