javascript - 在 django 模板 forloop 中使用时在 javascript 中选择按钮
问题描述
我有 html 表格
<tbody>
{% for item in cartitems %}
<tr>
<th scope="row">{{forloop.counter}}</th>
<td>{{item.name}}</td>
<td id="counter">
<button id='minusButton' class="btn btn-default btn-xs">
<i class="fas fa-minus mr-2"></i>
</button>
1
<button id='plusButton' class="btn btn-default btn-xs">
<i class="fas fa-plus ml-2"></i>
</button>
</td>
<td>{{item.price}}</td>
</tr>
{% endfor %}
</tbody>
我想通过单击加号,减号按钮来增加和减少第二个 td 中的文本,现在是 1
我写了这个 javascript,但它只适用于第一个按钮循环。
var plusButton = document.getElementById("plusButton")
var minusButton = document.getElementById("minusButton")
let counter = 1;
plusButton.onclick = function(){
counter ++
this.parentElement.childNodes[2].nodeValue = counter
}
minusButton.onclick = function(){
counter --
this.parentElement.childNodes[2].nodeValue = counter
}
我希望所有按钮都能选择并增加和减少它们各自的 td 文本
解决方案
好主意苏珊让我帮你解决你的问题。解决此问题的最佳方法是创建自定义 Django Widget。我们将编辑/创建 4 个文件,然后这个小部件也将可供您项目的其余部分使用。
HTML(加减号.html):
<input
type="number"
name="{{ widget.name }}"
class="form-control quantity-number"
value="{{ widget.value }}"
min="1"
max="10"
{% include "django/forms/widgets/attrs.html" %} />
<button
type="button"
class="btn btn-primary"
data-types="minus"
data-field="{{ widget.name }}">
-
</button>
<button
type="button"
class="btn btn-default btn-number btn-plus"
data-type="plus"
data-field="{{ widget.name }}">
+
</button>
JavaScript(加减号.js):
$(function(){
$('.btn-number').click(function (e){
e.preventDefault();
fieldName = $(this).attr('data-field');
type = $(this).attr('data-type');
var input = $("input[name'"+ fieldName + "']");
var currentVal = parseInt(input.val());
if (type == 'minus') {
if (currentVal > input.attr('min')){
input
.val(currentVal - 1)
.change();
}
if (parseInt(input.val())== input.attr('min')){
$(this).attr('disabled', true);
}
CSS(加减号.css)
.quantity-number {
-moz-appearance:text-field;
}
.quantity-number:: -webkit-inner-spin-button,
.quantity-number:: -webkit-outer-spin-button {
-webkit-appearance:none;
-moz-appearance:none;
margin:0;
}
项目目录/appdir/widgets.py:
from django.forms.widgets import Widget
class PlusMinusNumberInput(Widget):
template_name = 'widgets/plusminusnumber.html'
class Media:
css = {
'all': ('css/plusminusnumber.css',)
}
js = ('js/plusminusnumber.js',)
最后,我们使用小部件注册了所有静态文件,现在您也可以将其用于项目的其余部分。更多细节请查阅官方文档。如果您不理解任何部分,请回复此解决方案。干杯。
更新:
小部件是一组 HTML/JS/CSS 规则,您可以将其定义为 Jinja 模板语言使用。已经在 Django 中为最常见的场景创建了许多预定义的小部件。您可以继续阅读有关小部件的官方文档。请在您的项目中实施该解决方案,以便我可以帮助您解决您可能遇到的任何问题。
推荐阅读
- redis - 有没有办法在将记录添加到redis中的键时发布消息?
- django - 当通过渲染传递变量时,我尝试尝试许多解决方案来解决 django 中的 HTTP 状态代码必须是整数
- json - React:为 setState 传递带有事件的 Prop
- html - 应用 Web 字体样式时,文本徽标会不规律地改变形状
- python - 如何使 Pandas 中的行操作更快?目前发布代码需要 13 小时
- c++ - 如何通过实例变量获取点的原点?
- python - scrapy 输出项目为每行 1 个列表元素
- php - 从 Laravel 中删除一对多关系
- node.js - NPM 安装包失败
- python - 聚合组导致熊猫数据框