如何在页面加载后启动 Bootstrap 切换按钮,如果打开则不调用回调

Posted

技术标签:

【中文标题】如何在页面加载后启动 Bootstrap 切换按钮,如果打开则不调用回调【英文标题】:How to make Bootstrap toggle button start on after page loads and not call callback if on 【发布时间】:2016-09-30 19:50:02 【问题描述】:

我一直在使用 Laravel 5 进行电子商务。在每个产品的详细信息页面中,我希望访问者单击切换按钮以将该项目添加到购物车,然后再次单击以删除该项目。当我的访问者重新加载页面或稍后返回该产品的详细信息页面时,我希望该切换按钮在页面加载后启动“打开”,以便我的访问者知道该产品已经在购物车中。我想使用一个切换按钮,因为它内置了元素的切换动画。我使用Bootstrap Toggle 作为切换按钮元素。到目前为止我所做的是:

    按钮的 html

    <input id="btn_cart_item_toggle" type="checkbox" checked data-toggle="toggle" data- data-offstyle="danger" data-on="<i class='fa fa-shopping-cart'></i> Adicionar ao carrinho" data-off="<i class='fa fa-times'></i> Remover do carrinho"  data-style="slow">
    

    我将布尔值传递给控制器​​ (in_cart) 以判断产品是否已添加到购物车中,因此我有我的 Blade 文件:

    @if ($in_cart)
    $(document).ready(function() 
        $('#btn_cart_item_toggle').prop('checked', true).change();
        bootbox.alert('DEBUG: Product in cart');
    );
    @endif
    

    在这之后,我有一些带有 Blade 生成内容的 jQuery 代码,用于使用产品 ID 进行 AJAX 调用(从购物车中添加/删除)。

    $('#btn_cart_item_toggle').change(function () 
        if ($(this).prop('checked')) 
            $.post( " route('api_cart_remove') ",  id: ' $product->id ' , function(data) 
                if (data.success) 
                    $('span.cart-count').html(data.count);
                 else 
                    bootbox.alert('Fail');
                
            );
         else 
            $.post( " route('api_cart_add') ",  'id': ' $product->id ' , function(data) 
                if (data.success) 
                    $('span.cart-count').html(data.count);
                 else 
                    bootbox.alert('Fail');
                
            );
        
    );
    

我无法在不调用回调的情况下使该切换按钮开始“打开”。使用$('#btn_cart_item_toggle').prop('checked', true).change(); 调用回调函数,我得到“失败”,因为它正在尝试添加已经在购物车中的产品。如果$in_carttrue,我希望该按钮启动“打开”而不调用该函数。 我该怎么做?或者有什么更好的方法?

这很难解释,因为它涉及到很多东西,比如 Blade、jQuery、CSS 和 Bootstrap,但我希望我已经足够清楚了。

更新:

根据@CBroe 的评论,我设法让它按我想要的方式工作:

<input id="btn_cart_item_toggle" type="checkbox" data-toggle="toggle" @if (!$in_cart) checked @endif data- data-offstyle="danger" data-on="<i class='fa fa-shopping-cart'></i> Adicionar ao carrinho" data-off="<i class='fa fa-times'></i> Remover do carrinho"  data-style="slow">

【问题讨论】:

我认为您应该编辑输出此输入元素的模板以包含checked 属性以... 是的,现在可以使用了。谢谢。如果您可以根据该评论详细说明答案,我想我可以将其标记为正确答案。 【参考方案1】:

我不会在客户端执行此操作 - 而是编辑输出此输入元素的模板以包含 checked 属性以开头(如果适用)。

(这也应该让它“更快”,这意味着用户将在页面加载时看到正确的状态,而不仅仅是在 JS 运行之后。)

【讨论】:

以上是关于如何在页面加载后启动 Bootstrap 切换按钮,如果打开则不调用回调的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 4 导航栏切换损坏

Bootstrap轮播图的切换按钮如何制作?

bootstrap怎么实现tabpanel切换 关闭 刷新

即使在我重新加载页面后,如何防止已经在 J​​avascript 中启动的“onclick”功能?

如何在关闭 Bootstrap 3 模式时重新加载页面

如何在不刷新页面加载的情况下保留 jQuery 和 Bootstrap 功能?