【问题标题】:Removing an element using django form使用 django 表单删除元素
【发布时间】:2015-07-19 00:06:17
【问题描述】:

当旁边的一个按钮在没有 ajax 的情况下单击时,我想删除一个 <li> 行。

<form action="" method="post"> {% csrf_token %}
        <ul>
        {% for task in my_tasks %}
            <li>
                <input id="id_{{ task.todos }}" name="{{ task.todos }}" type="checkbox">
                <label for="item-1">{{ task.todos }}</label>
                <button class="delete">&#10008;</button>
            </li>
        {% endfor %}
        </ul>
        <button type="submit">Save</button>
    </form>

这是我的模板代码。当单击具有“删除”类的按钮时,我想删除标记的元素。 我能怎么做? 谢谢

【问题讨论】:

标签: javascript django forms


【解决方案1】:

您可以使用 JavaScript 做到这一点。无需触摸服务器,因此无需 AJAX(除非您需要在刷新时保存状态,您的问题中没有提到):

// Find the button elements
var buttons = document.getElementsByClassName('delete');
// Attach a click event to each
for (var i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener('click', deleteItem);
}
function deleteItem() {
    var li = this.parentNode;
    li.parentNode.removeChild(li);
}

一个基本的可运行示例:

var buttons = document.getElementsByClassName('delete');
for (var i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener('click', deleteItem);
}
function deleteItem() {
    var li = this.parentNode;
    li.parentNode.removeChild(li);
}
<ul>
    <li>
        <input id="id_1" type="checkbox">
        <label for="item-1">Something 1</label>
        <button class="delete">&#10008;</button>
    </li>
    <li>
        <input id="id_2" type="checkbox">
        <label for="item-2">Something 2</label>
        <button class="delete">&#10008;</button>
    </li>
    <li>
        <input id="id_3" type="checkbox">
        <label for="item-3">Something 3</label>
        <button class="delete">&#10008;</button>
    </li>
</ul>

【讨论】:

  • 很好的答案,虽然我会为了 KISS 而选择 jQuery。
  • 我确实同意 jQuery 更“漂亮”...但是 vanilla JS 非常简单...而且更小 93kb...但是,正如您在其他评论中提到的,jQuery 可能 如果 OP 可以在他/她的应用程序的其他领域中受益,那是有意义的。
  • 请注意:DOM4 中有一个新方法remove()。函数deleteItem 的主体可以简化为:this.parentNode.remove()。我还不知道这是否适用于所有浏览器。
  • 是的,很遗憾,remove() 不支持 IE。如果 OP 不关心这一点,remove() 是一个不错的选择。
【解决方案2】:

您可以使用纯 JavaScript 来完成,这里根本不需要 AJAX。使用像 jQuery 这样的库可以极大地简化您的工作:

$("button").click(function () {
    $("button").parent().remove();
});

我没有测试它,但我认为它应该可以工作。 您将事件处理程序 (click) 分配给您的按钮元素。当一个按钮被点击时,它会选择其父级&lt;li&gt;,并将其移除。

编辑:

以上代码将删除所有&lt;li&gt; 元素。应该稍微改动一下:

$("button").click(function () {
    $(this).parent().remove();
});

编辑:

这是一个 jsfiddle:https://jsfiddle.net/532nz1o3/

【讨论】:

  • jQuery 在这种情况下是多余的。
  • @mevius 是的,你是对的。然而,jQuery 非常优雅、简洁且易于维护。也许 OP 正在构建一个 jQuery 可以派上用场的整个应用程序。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2015-07-14
  • 2017-06-04
  • 1970-01-01
  • 2016-09-13
  • 2013-02-10
  • 1970-01-01
相关资源
最近更新 更多