【问题标题】:Twitter-Bootstrap 5 carousel indicators and controls not working. Why?Twitter-Bootstrap 5 轮播指示器和控件不起作用。为什么?
【发布时间】:2021-09-06 01:47:39
【问题描述】:

我正在使用 Django 框架制作电子商务网站。

我无法让我的引导轮播工作。单击指标和控件无效。 我已经使用 NPM 提取了 Bootstrap 源文件。

main.html

<!DOCTYPE html>
{% load static %}
<html lang="fr">

    <head>
        
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    
        <link href="{% static 'css/main.css' %}" rel="stylesheet">

        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
            
        <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    
        <title>
            {% block title %}
            {% endblock title %}
        </title>

    </head>

    <body class="mt-sm-5 mt-md-5 mt-lg-5 mt-xl-5">
        <header>
            <div class="container border-bottom border-primary border-1">
            </div>
        </header>

        <section class="page-content" id="page-content">
            {% block content %}
            {% endblock content %}
        </section>

        <script src="{% static 'js/bootstrap.js' %}"></script>
    </body>
</html>


product_details.html

{% extends 'main.html' %}
{% load static %}

{% block title %}
Boutique - {{ product.title }}
{% endblock title %}


{% block content %}

    <div class="container">
        <div class="row" >
            <div id="product-carousel" class="col-sm-12 col-md-6 border border-danger carousel slide carousel-fade" data-bs-ride="carousel">
                <div class="carousel-indicators">
                    <button type="button" data-bs-target="#product-carousel" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
                    {% if product.image2 %}
                        <button type="button" data-bs-target="#product-carousel" data-bs-slide-to="1" aria-label="Slide 2"></button>
                    {% endif %}
                    {% if product.image3 %}
                        <button type="button" data-bs-target="#product-carousel" data-bs-slide-to="2" aria-label="Slide 3"></button>
                    {% endif %}
                </div>
                <div class="carousel-inner">
                    <div class="carousel-item active">
                        <img src="{{ product.image.url }}" class="img-fluid" alt="...">
                    </div>
                    {% if product.image2 %}
                    <div class="carousel-item">
                        <img src="{{ product.image2.url }}" class="img-fluid" alt="...">
                    </div>
                    {% endif %}
                    {% if product.image3 %}
                    <div class="carousel-item">
                        <img src="{{ product.image3.url }}" class="img-fluid" alt="...">
                    </div>
                    {% endif %}
                </div>
                <button class="carousel-control-prev" type="button" data-bs-target="#product-carousel" data-bs-slide="prev">
                    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                    <span class="visually-hidden">Previous</span>
                </button>
                <button class="carousel-control-next" type="button" data-bs-target="#product-carousel" data-bs-slide="next">
                    <span class="carousel-control-next-icon" aria-hidden="true"></span>
                    <span class="visually-hidden">Next</span>
                </button>
            </div>


            <div class="col-sm-12 col-md-6 border border-warning">
                <h3> {{ product.title }} </h3>
                <h4> {{ product.price }} € </h4>
                <h5> {{ product.description }} </h5>
                <h6> {{ product.category }} </h6>

                {% if product.stock > 0 %}
                <div class="container border border-success">
                    <div class="row" >
                        <div class="col">
                            <label for="select-qty">Quantity</label>
                        </div>
                        <div class="col">
                            <select class="form-select form-select-sm" aria-label=".form-select-sm example" id="select-qty">
                                <option value="1">1</option>
                                <option value="2">2</option>
                                <option value="3">3</option>
                                <option value="4">4</option>
                                <option value="5">5</option>
                            </select>
                        </div>
                        <div class="col">
                            <button id="add-to-cart-button" value="{{ product.id }}" type = "button" class="btn btn-success">Ajouter au panier</button>
                        </div>
                    </div>
                </div>
                {% endif %}

                <div class="container">
                    <div class="row" >
                        <div class="col-sm-12 col-md-6">
                            <a class="btn btn-dark" href="{% url 'basket:basket_summary' %}">Panier</a>
                        </div>
                        <div class="col-sm-12 col-md-6">
                            <a class="btn btn-light" href="{% url 'store:all_products' %}">Voir les produits</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>


    <script>

        // Add to cart
        $(document).on('click', '#add-to-cart-button', function (e) {
            e.preventDefault();
            $.ajax({
                type: 'POST',
                url: '{% url "basket:basket_add" %}',
                data: {
                    productid: $('#add-to-cart-button').val(),
                    productqty: $('#select-qty option:selected').val(),
                    csrfmiddlewaretoken: "{{csrf_token}}",
                    action: 'post',
                },
                success: function (json) {
                    document.getElementById("cart-count").innerHTML = json.qty;
                },
                error: function (xhr, errmsg, err) {
                },
            });
        })

        
    </script>

    <script type="text/javascript">
        $(function(){
            $('#product-carousel').carousel();
        });
    </script>

{% endblock content %}

产品至少有图像(图像和图像 2)以及控件和指示器显示。但是点击它们时没有任何反应。

编辑

在浏览器控制台中,我有两个错误。

未捕获的语法错误:导入声明只能出现在模块的顶层

未捕获的类型错误:$(...).carousel 不是函数

【问题讨论】:

  • 浏览器控制台有错误吗?
  • 是的。我已经编辑了我的帖子。由于我是 JS 新手,所以我并不真正了解这些错误。

标签: javascript jquery django twitter-bootstrap bootstrap-5


【解决方案1】:

您得到一个Uncaught TypeError: $(...).carousel is not a function,因为您在加载 boostrap.js 之前调用了该函数。

试试这个,首先加载 boostrap.js(你可以从本地加载它)

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>

然后添加您的自定义脚本

<script type="text/javascript">
   $(function(){
       $('#product-carousel').carousel();
   });
</script>

【讨论】:

  • 谢谢。但是为什么我必须从 CDN 直接访问 bootstrap.js 呢?如果我从 node_modules 导入 bootstrap.js,它不起作用...
  • 我不确定,可能是因为任何安装错误或任何版本不匹配。
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 2018-05-10
  • 2021-04-01
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
相关资源
最近更新 更多