[英]How to delete a checkbox when it is ticked?
我有一个显示项目列表的模板。 每个项目都有一个复选框。 我希望能够在选中复选框时从复选框中删除项目。 因此,我需要一个按钮,用于在选中复选框后删除项目。 这是我的模板。
{% for item in items %}
<tr>
<td><input type="checkbox" name="item" value="{{item.pk}}" checked="checked"></td>
<td>{{item.tiptop_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td>
<td>{{item.type}}</td><td>{{item.format}}</td>
</tr>
{% endfor %}
我猜可能我也需要知道该写些什么。
编辑:
不知道为什么它仍然没有删除。 查看我的意见。 我的编辑订单表格。 它是安静的巨大。 我认为删除功能可以解决问题。 反正看看。
def edit_order(request, order_no):
# Alot of code here
if request.method == 'POST':
form = forms.OrderForm(request.POST, instance = order)
if form.is_valid() and save_item is not None:
form.save(True)
request.user.message_set.create(message = "The order has been updated successfully.")
return HttpResponse("<script language=\"javascript\" type=\"text/javascript\">window.opener.location = window.opener.location; window.close();</script>")
if status is not None and contact is not None and save_status is not None and delete_item is not None:
try:
for id in status_items:
item = models.StorageItem.objects.get(pk = id)
delete_item = item
delete_item.delete()
current_status = models.ItemStatusHistory(item = item, contact = contact, status = status,
user = request.user)
current_status.save()
except:
pass
request.user.message_set.create(message = "Status successfully changed for {0} items".format(len(status_items)))
您需要编写一个获取POST数据的视图,找出已选中哪些复选框,然后从数据库中删除ID匹配的项目。
您可能还希望将视图包装在装饰器中,以确保用户有权删除内容,或者如果要这样做,请检查登录用户是否与要删除的项目的所有者相同。 。
或者,您可以使用Django的表单框架来处理一些繁重的工作。
从数据库中删除对象在db模型文档中。
这些事情并不完全是琐碎的,所以不要在这里等待太长时间以寻求完整的解决方案-进行黑客攻击!
[编辑]:真正的问题是能够从表单提交数据库中删除项目,而不是从HTML表中删除行。 有关在Django中提交表单的信息,请参见此页面教程上的“一个简单的表单处理示例” 。 [/编辑]
您可以将以下示例复制到计算机上的.html文件中,然后在网络浏览器中打开。 它使用简单的JavaScript。 对于这样的事情,我更喜欢使用jQuery ,但是根据您的使用情况,它可能会比您喜欢的开销更大。 但是,如果您需要进行大量的客户端编程,我强烈建议您使用jQuery。
注意:我认为使用parentNode.parentNode.parentNode有点混乱,但是此示例故意使用表/复选框配置,如原始文章中所述。
最好将ID分配给与每个复选框相关的表的行,以便更易于访问。
我还包括了<input type="button">
因为它是原始帖子中所要求的。 您可能需要考虑将onclick=
事件分配给每个复选框,以便用户可以在单击项目后立即将其删除。 但这是一种偏爱。
<html>
<head>
<script>
function hideCheckedRows() {
var checkboxes = document.getElementsByName("item");
var checkboxes_to_remove = new Array();
var count = 0;
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked == true) {
checkboxes_to_remove[count++] = checkboxes[i];
}
}
for (var i = 0; i < checkboxes_to_remove.length; i++) {
cbx = checkboxes_to_remove[i];
// parentNode.parentNode.parentNode is the <tr>
// parentNode.parentNode is the <td> containing the checkbox
cbx.parentNode.parentNode.parentNode.removeChild(
cbx.parentNode.parentNode);
}
}
</script>
</head>
<body>
<table>
<tr name="table_row">
<td><input type="checkbox" name="item" value="Check1"></td>
<td>Id1</td><td>Alt_Id1</td><td>Title1</td>
<td>Type1</td><td>Format1</td>
</tr>
<tr name="table_row">
<td><input type="checkbox" name="item" value="Check2"></td>
<td>Id2</td><td>Alt_Id2</td><td>Title2</td>
<td>Type2</td><td>Format2</td>
</tr>
<tr name="table_row">
<td><input type="checkbox" name="item" value="Check3"></td>
<td>Id3</td><td>Alt_Id3</td><td>Title3</td>
<td>Type3</td><td>Format3</td>
</tr>
</table>
<input type="button" value="Click to remove checkboxes!"
onclick="hideCheckedRows();"/>
</body>
</html>
编辑:
如果您希望从数据库中删除该项目,我们需要更多信息。 我们需要知道正在使用哪种数据库,以及处理提交按钮的“ POST”的服务器端代码是什么样的。 本示例将从用户的Web浏览器中的表中删除该复选框,但对数据库上的任何内容均无效。
您做错了:)创建仅用于删除的视图。 发送该元素的POST或GET ID(或url),从db中删除该元素,然后作为响应发送未删除元素的列表。
像这样的东西:
def delete_element(request, id):
el = get_object_or_404(Element, id=id)
if el:
el.delete()
html = render_list(request)
if request.is_ajax():
result = simplejson.dumps({
"html": "html",
}, cls=LazyEncoder)
return HttpResponse(result, mimetype='application/javascript')
def render_list(request):
elements = Element.objects.all()
return render_to_string(template_name, RequestContext(request, {
"element" : elements, })
然后,在模板中,您首先使用javascript调用delete函数的url,然后在成功时,使用data ['html']更新模板。
您可以问这个人: http : //twitter.com/sasklacz,因为他正在django上用ajax编写一些教程,以为您提供所需的确切代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.