为多个列表项制作onClick删除功能

Making onClick delete function for multiple list items

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

我的删除函数如下所示,并删除基于 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);
}

现在的问题是,所有的删除按钮都会删除评论数组中的最后一项,而不是它所附加的评论。有没有办法 "prime" 每个具有正确 ID 的按钮的删除功能,而不是只删除最后一项?

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

Use let instead of var.