为什么Javascript不能与Django HTML一起使用?

为什么Javascript不能与Django HTML一起使用?,javascript,html,django,Javascript,Html,Django,我试图在我的Django网站中添加一些javascript代码。javascript代码应该检查按钮是否被按下,并在按钮被按下时提醒用户。但是,这仅适用于第一个按钮。因为我在所有按钮上循环显示它们,所以我认为javascript没有将其视为HTML代码。下面是javascript代码 const card = document.querySelector('.card'); card.addEventListener('click', e => { if (e.target.clas

我试图在我的Django网站中添加一些javascript代码。javascript代码应该检查按钮是否被按下,并在按钮被按下时提醒用户。但是,这仅适用于第一个按钮。因为我在所有按钮上循环显示它们,所以我认为javascript没有将其视为HTML代码。下面是javascript代码

const card = document.querySelector('.card');

card.addEventListener('click', e => {
  if (e.target.classList.contains('btn')) {
    alert('hi')
  }
})
以下是HTML/Django代码:

{% extends "/Users/marco/Documents/codes/Python/Django/vracenmasse/templates/base_generic.html" %}
{% load static %}
{% block content %}

    <center><h1>Nos Produits</h1></center>
    <hr>

    <div class="row" style = "border: 50px solid white;">

            {% for product in products %}

                <div class="card" style="width: 18rem;">
                    <img class="card-img-top" src="../../../media/{{ product.product_picture.name }}" alt="{{ product.product_picture.name }}">
                      <div class="card-body">
                        <center>
                            <h5 class="card-title">{{ product.name }}</h5>
                            <p class="card-text">{{ product.product_price|floatformat:2 }}$ / unité</p>
                            <p class="card-text">Catégorie : {{ product.type_of_product }}</p>
                            {% if product.new_product == "yes" %}
                                <b><p class="card-text"><font size="3.5" color="Orange">Nouveaux!</font></p></b>
                            {% endif %}
                            {% if product.availability == "Out Of Stock"%}
                                <b><p class="card-text"><font size="1.5" color="red">En rupture de stock</font></p></b>
                                <hr>
                                <button type="button" class="btn btn-primary" disabled>Ajouter au Panier</button>
                            {% else %}
                                <p style="font-size:15;">Quantité : </p><input type="number" step="12" min="0" />
                                <span class="validity"></span>
                                <hr>

                                <button type="button" class="btn btn-outline-primary" id='realbutton'>Ajouter au Panier</button>

                            {% endif %}

                            <div class="alert alert-success alert-dismissible fade show" role="alert" style ="visibility:hidden;">
                              <center>Produit ajouté au panier!</center><button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                              </button>
                            </div>


                        </center>
                  </div>
                </div>  
                &nbsp;
            {% endfor %}
        </div>
</div>


<script src="{% static "products/buttonalerts.js" %}"></script>  
{% endblock %}
{%extends”/Users/marco/Documents/codes/Python/Django/vracenmasse/templates/base_generic.html“%}
{%load static%}
{%block content%}
无产品

{products%中产品的%s} {{product.name}

{{product.product_price | floatformat:2}}$/unité

Catégorie:{{product.type_of_product}

{%if product.new_product==“yes”%}

Nouveaux

{%endif%} {%if product.availability==“缺货”%}

取消库存


阿霍帕尼尔酒店 {%else%} 数量:


阿霍帕尼尔酒店 {%endif%} 普罗杜特·阿约特·帕尼尔! &时代; {%endfor%} {%endblock%}

第一个按钮是唯一有效的。我们可以在第6行看到for循环。它迭代所有产品,并添加自己的“添加到购物车”按钮。不过,警报只对第一个按钮有效。谢谢。

问题是您正在为列表中的每个产品创建一个“div”元素,但是querySelector()方法只返回具有指定类的第一个元素

您需要使用querySelectorAll()方法获取包含所有元素的列表,然后将事件侦听器应用于每个元素:

const cards = document.querySelectorAll('.card');

for (let i = 0; i < cards.length; i++) {
    cards[i].addEventListener('click', e => {
        if (e.target.classList.contains('btn')) {
            alert('hi')
        }
    }
)
const cards=document.queryselectoral('.card');
for(设i=0;i{
if(e.target.classList.contains('btn')){
警报(“嗨”)
}
}
)
另一种解决方案是直接查询包含“btn”类的元素,并将事件侦听器添加到这些元素中:

const buttons = document.querySelectorAll(".btn");

for (let i = 0; i < buttons.length; i++) {                  
    buttons[i].addEventListener('click', function() {
        alert('hi');
    }
)
const buttons=document.queryselectoral(“.btn”);
对于(设i=0;i
问题在于,您正在为列表中的每个产品创建一个“div”元素,但querySelector()方法仅返回具有指定类的第一个元素

您需要使用querySelectorAll()方法获取包含所有元素的列表,然后将事件侦听器应用于每个元素:

const cards = document.querySelectorAll('.card');

for (let i = 0; i < cards.length; i++) {
    cards[i].addEventListener('click', e => {
        if (e.target.classList.contains('btn')) {
            alert('hi')
        }
    }
)
const cards=document.queryselectoral('.card');
for(设i=0;i{
if(e.target.classList.contains('btn')){
警报(“嗨”)
}
}
)
另一种解决方案是直接查询包含“btn”类的元素,并将事件侦听器添加到这些元素中:

const buttons = document.querySelectorAll(".btn");

for (let i = 0; i < buttons.length; i++) {                  
    buttons[i].addEventListener('click', function() {
        alert('hi');
    }
)
const buttons=document.queryselectoral(“.btn”);
对于(设i=0;i