繁体   English   中英

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

[英]push and pop item in array on onchange event :javascript

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

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

当我单击复选框时,选中该特定记录的值,使用'onchange'事件传递给javascript函数。

与uncheck功能相同。

示例脚本

//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的新手,无法理解这些例子。

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

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

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

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

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);
            }
        }

您可以在此处阅读有关拼接的更多信息

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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM