gpt4 book ai didi

javascript - 未选中复选框时从数组中删除元素

转载 作者:行者123 更新时间:2023-11-28 14:02:25 25 4
gpt4 key购买 nike

当选中该复选框时,我将一个元素添加到数组中,而当未选中该复选框时,我需要将其删除。我使用 splice 来删除元素。我似乎无法在未选中的情况下调用事件。我尝试使用这个:

if ($('input[name="'+category+'"]:checked'))
item_id[category] = $(this).attr("id");
else
item_id.splice(category, 1);

当选中复选框时,它会添加所需的元素,但在未选中时似乎不会删除它。变量类别是循环变量并且是正确的。

如果有人能解决这个问题,我们将不胜感激。

最佳答案

无论元素是否匹配,jQuery 选择器始终返回一个对象。

您实际上得到的是:

if (new Object())
item_id[category] = $(this).attr("id");
else
item_id.splice(category, 1);

对象总是真实的(无论它是空对象,还是 John Resig 初始化的对象),所以这个 if语句永远不会执行else .

您可能想要的是:

if ($('input[name="'+category+'"]:checked').length)
item_id[category] = $(this).attr("id");
else
item_id.splice(category, 1);

它检查length相反,属性(property)。

但这仍然行不通,如 splice()将移动数组中的所有元素;制作category错了。

如果您将事件绑定(bind)到多个复选框元素上,则使用 .bind() 是不明智的(以及它的对应项 .click() ),因为此方法将为每个复选框绑定(bind)一个事件。相反,使用 .live() ,或 .delegate() ;这会将一个事件绑定(bind)到所有复选框元素的祖先,并监听事件(使用 JavaScript 事件冒泡),这样效率更高。

考虑到这两点,您可能会喜欢这样的东西。

$(yourJquerySelector).live('change', function () {
var category = '?' // (this.value ?)

item_id[category] = this.checked ? this.id : undefined;
});

关于javascript - 未选中复选框时从数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com