简体   繁体   English

删除 function 在新创建的项目中不起作用

[英]delete function not working in newly created item

I have a function that adds an item to a list and a function that deletes an item.我有一个 function 将项目添加到列表和 function 删除项目。 When I add the item it displays correctly but the item cannot be deleted until I refresh the page.当我添加项目时,它会正确显示,但在刷新页面之前无法删除该项目。 I'm using python 3, flask and javascript but I don't know why the delete function cannot be called on the newly created item. I'm using python 3, flask and javascript but I don't know why the delete function cannot be called on the newly created item. This is the relevant code:这是相关代码:

index.html:索引.html:

const checkboxes = document.querySelectorAll('.check-completed');
for (let i = 0; i < checkboxes.length; i++) {
    const checkbox = checkboxes[i];
    checkbox.onchange = function(e) {
        console.log('click')
        const newCompleted = e.target.checked;
        const todoId = e.target.dataset['id'];
        fetch('/todos/' + todoId + '/set-completed', {
                method: 'POST',
                body: JSON.stringify({
                    'completed': newCompleted
                }),
                headers: {
                    'Content-Type': 'application/json'
                }
            })
            .then(function() {
                document.getElementById('error').className = 'hidden';
            })
            .catch(function() {
                document.getElementById('error').className = '';
            })
    }
}

const descInput = document.getElementById('description');
document.getElementById('form').onsubmit = function(e) {
    e.preventDefault();
    const desc = descInput.value;
    descInput.value = '';
    fetch('/todos/create', {
            method: 'POST',
            body: JSON.stringify({
                'description': desc,
            }),
            headers: {
                'Content-Type': 'application/json',
            }
        })
        //.then(response => {
        //  return response.json()
        //  data = response.json()
        //})
        .then(response => response.json())
        .then(jsonResponse => {
            const li = document.createElement('li');
            const checkbox = document.createElement('input');
            checkbox.className = 'check-completed';
            checkbox.type = 'checkbox';
            checkbox.setAttribute('data-id', jsonResponse.id);
            li.appendChild(checkbox);

            const text = document.createTextNode(' ' + jsonResponse.description);
            li.appendChild(text);

            const deleteBtn = document.createElement('button');
            deleteBtn.className = 'xbox';
            deleteBtn.setAttribute('data-id', jsonResponse.id);
            deleteBtn.innerHTML = '&cross;';
            li.appendChild(deleteBtn);

            document.getElementById('todos').appendChild(li);
            document.getElementById('error').className = 'hidden';
        })
        .catch(function() {
            console.error('Error occurred');
            document.getElementById('error').className = '';
        })
}

Delete code删除代码

const deletes = document.querySelectorAll('.xbox');
for (let i = 0; i < deletes.length; i++) {
    const btn = deletes[i];
    btn.onclick = function(e) {
        console.log('click')
        const todoId = e.target.dataset['id'];
        fetch('/todos/' + todoId, {
                method: 'DELETE'
            })
            .then(function() {
                const item = e.target.parentElement;
                item.remove();
            })
    }
}

app.py应用程序.py

@app.route('/todos/create', methods=['POST'])
def create_todo():
    error = False
    body = {}
#   description = request.form.get('description', '')
#   return render_template('index.html')
    try:
        description = request.get_json()['description']
        todo = Todo(description=description)
        #body['description'] = todo.description
        db.session.add(todo)
        db.session.commit()
        body['id'] = todo.id
        body['completed'] = todo.completed
        body['description'] = todo.description
    except:
        error=True
        db.session.rollback()
        print(sys.exc_info())
    finally:
        db.session.close()
    if error:
        abort (400)
    else:
        return jsonify(body)

I got it.我知道了。 I had to name the update and delete functions and call them inside the add item function to attach the functions to the new css elements.我必须命名更新和删除函数并在添加项 function 中调用它们,以将函数附加到新的 css 元素。

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

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