对多个列表项进行onClick删除功能

时间:2018-08-07 11:36:24

标签: javascript function sharepoint-online office365api

我目前正在使用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);
}

现在的问题是,所有删除按钮都删除注释数组中的最后一项,而不是它所附加的注释。有没有一种方法可以用正确的ID“启动”每个按钮的删除功能,而不仅仅是删除最后一个项目?

1 个答案:

答案 0 :(得分:0)

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

Use let instead of var