使用javascript向数组添加/删除值
在我的应用程序中,我为用户创建了一个添加和删除行的功能(PHP和JS) 我已在函数之外声明了我的项数组。我遇到的问题是,当一个数组删除一行时,该数字不会添加回数组 这是我的密码:使用javascript向数组添加/删除值,javascript,jquery,Javascript,Jquery,在我的应用程序中,我为用户创建了一个添加和删除行的功能(PHP和JS) 我已在函数之外声明了我的项数组。我遇到的问题是,当一个数组删除一行时,该数字不会添加回数组 这是我的密码: var maxField = 10 var x = 0; var idArray = []; for (var i = 1; i <= maxField; i++) { idArray.push(i); } // sort the array as number, not as a string
var maxField = 10
var x = 0;
var idArray = [];
for (var i = 1; i <= maxField; i++) {
idArray.push(i);
}
// sort the array as number, not as a string
idArray = idArray.sort(function(a,b) {
return (+a) - (+b);
});
$('#addItem').click(function() {
x = idArray.shift(); // get the next available id in the idArray for the record
if(x <= maxField) {
// do something
}
});
$('#removeItem').on('click', '.remove_button', function(e) {
var removeButtonId = this.id,
splitRemoveButtonId = removeButtonId.split('_');
x = splitRemoveButtonId[2];
// get the value of x and put it back in the idArray, sort the array and be ready for the next record
idArray.push(x);
idArray = idArray.sort(function(a,b) {
return (+a) - (+b);
});
alert(x +' - '+ idArray);
e.preventDefault();
});
该问题似乎与用于填充数组的for循环有关,或者与removeItem函数中的代码未更新数组有关
for (var i = 1; i <= maxField; i++) {
idArray.push(i);
}
我建议在处理类似项目列表时尽量避免使用ID。下面是一个通用示例,它允许用户添加/删除非常简单的元素。页面操作仅通过相对定位完成。它不构建通过创建和附加单个节点来添加的节,而是克隆html中存在的隐藏节点
$(“#容器”)。在('click','add',函数(){
if($('.item').length不需要一元加号,减号将字符串强制为数字。排序数组的赋值是非常有效的,因为排序在原地工作。这是一个创建ID的复杂系统!为什么需要它们?请修复问题中的引号。$('#addItem')中有一个卷曲的引号
并且在“$”(“#removietem)中有一个卷曲的引号和缺少的引号.我已经提交了一份编辑@Barmar@Catch44OP应该对其进行编辑,以确保其与实际代码相匹配。虽然此代码片段可能会解决问题,但确实有助于提高您文章的质量。请记住,您将为将来的读者回答此问题,而这些人可能不知道您代码提示的原因打开。请不要用解释性注释挤满代码,这会降低代码和解释的可读性!嗨,James,谢谢你的提示。我在一个页面上有几个表格,每个表格都有一个带有选择下拉菜单的表格。根据选择,我需要在该行中显示4个特定的值/选项。你认为呢这将像您上面描述的那样工作?什么是最好的方法?使用最接近的()遍历td/tr?谢谢。@Mike,抱歉,刚刚看到您关于数据id=“0”的消息。对于我上面提到的表行,这种方法有效吗?谢谢。是的,这种方法适用于下拉列表或其他输入字段的网格。对于表,制作一个隐藏但填充有下拉列表等的tr并克隆它。
for (var i = 1; i <= maxField; i++) {
idArray.push(i);
}
idArray = idArray.map(Number);