首页 > 解决方案 > 为多个列表项制作onClick删除功能

问题描述

我目前正在使用 Rest API 为 SharePoint 页面开发自定义评论解决方案。我无法根据他们的 ID 为每个评论制作删除按钮。

我的 Delete 函数看起来像这样并删除基于 id 的列表项:

function deleteListItems(id) {
$.ajax  
    ({  
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/GetByTitle('Comments')/items(" + id + ")",  
        type: "POST",  
        headers:  
    {  
        "Accept": "application/json;odata=verbose",  
        "Content-Type": "application/json;odata=verbose",       
        "X-RequestDigest": $("#__REQUESTDIGEST").val(),  
        "IF-MATCH": "*",  
        "X-HTTP-Method": "DELETE"  
    },  
    success: function()  
    {  
        window.location.reload; 
    },  
    error: function (error) {
        alert(JSON.stringify(error));  
    }  
});  
}   

每个评论都是从具有不同 id 的评论对象数组创建的,对于每个评论对象,我从以下代码段创建一个删除按钮:

for (var i = 0; i < commentObj.length; i++) {

    //Making of the comment contents

    var deleteBtn = document.createElement("a");
    btnContent = document.createTextNode("Delete");
    deleteBtn.appendChild(btnContent);
    deleteBtn.onclick = function(){deleteListItems(commentObj[i].Id)};
    newComment.appendChild(deleteBtn);
}

现在的问题是所有删除按钮都删除了评论数组中的最后一项,而不是它附加的评论。有没有办法为每个具有正确 ID 的按钮“启动”删除功能,而不仅仅是删除最后一项?

标签: javascriptfunctionsharepoint-onlineoffice365api

解决方案


在 JavaScript 中,关键字var定义了一个函数变量。该for循环不会为i. 这意味着,当您的函数被调用时, 的值i是循环结束后的值,它引用最后一项。

使用let而不是var.


推荐阅读