onchange事件中数组中的push和pop项:javascript

时间:2015-11-09 08:21:11

标签: javascript jquery arrays checkbox

我正在使用数据表,其中数据来自api服务。

我在操作列中添加了对eash行的复选框。

当我点击复选框时,选中该特定记录的值,使用' onchange'事件

与取消选中功能相同。

示例脚本

//checkbox added to each row holding unique id(ignored mentioning variables)
var passingId,orgName;
var dataList=[];

<td><input type="checkbox" id=passingId onchange="checkThis(passingId + ',' + orgName )"/></td>

function checkThis(ids, oName) {
            var el = document.getElementById(ids);
            if (el.checked) {
                $.post("demo_test_post.asp",
                {
                    OId: ids,
                    ONAme: oName
                });
                var listItemAdd = oName;
                dataList.push(listItemAdd);
                alert(dataList);
            }
            else if (!el.checked) {
                $.post("demo_test_post.asp",
                {
                    OId: ids,
                    ONAme: oName
                });
                var listItemRemove = oName;
                dataList.pop(listItemRemove);
                alert(dataList);
            }
        }

此方法在检查任何记录时将数据推送到数组。

取消选中时,必须从数组中删除该行的记录(仅在此情况下为oName)。

  

添加部件没有问题,删除部件正在工作但没有删除   选择的值但删除最后存储的值。我肯定不见了   一些东西,因为我不熟悉javascript无法理解这些例子。

如果有人可以提供帮助,请提供帮助。谢谢你的时间。

3 个答案:

答案 0 :(得分:2)

pop Stack 操作,可删除数组的最后一个元素。相反,您应该使用类似搜索给定元素的内容并将其删除,如下所示

var listItemRemove = oName;
var index = dataList.indexOf(listItemRemove);
if(index >= 0) dataList.splice(index, 1);

答案 1 :(得分:1)

你应该做的是将pop替换为拼接,为了做到这一点,你需要在数组中找到被删除的元素索引。

function checkThis(ids, oName) {
            var el = document.getElementById(ids);
            if (el.checked) {
                $.post("demo_test_post.asp",
                {
                    OId: ids,
                    ONAme: oName
                });
                var listItemAdd = oName;
                dataList.push(listItemAdd);
                alert(dataList);
            }
            else if (!el.checked) {
                $.post("demo_test_post.asp",
                {
                    OId: ids,
                    ONAme: oName
                });
                var removeItemIndex = dataList.indexOf(oName);
                if (removeItemIndex != -1) dataList.splice(removeItemIndex, 1);  //remove at this index - remove 1
                alert(dataList);
            }
        }

您可以阅读有关拼接here

的更多信息

答案 2 :(得分:1)

Array.pop()始终删除数组中的最后一个元素。要删除特定元素,您必须搜索并删除它。这可以使用Array.indexOf来查找元素的索引,使用Array.splice来删除它。

var index = dataList.indexOf(listItemRemove);
if (index !== -1){
    dataList.splice(index, 1);
}

或者,您可以使用Array.filter函数删除与搜索项匹配的所有元素。

dataList = dataList.filter(function(element){
    return element !== listItemRemove;
});

http://jsfiddle.net/ve8puvk3/