jquery - Bootstrap使用Jquery和ajax切换切换功能

标签 jquery ajax twitter-bootstrap

我在应用程序中使用 Bootstrap 开关,如下所示:

<div id="switch_toggle">
    <input id="switch-state" type="checkbox">
</div>

我使用jquery代码来获取每次开关时开关的当前状态 被点击。我使用的代码是:

$(document).on('click', '#switch_toggle', function(event) {
    val = $('#switch-state').bootstrapSwitch('state');
    console.log('current state : ' + val);
    $.ajax({
            url: "${rc.getContextPath()}/module/site-settings/update-title-display",
            type: "POST",
            data: {

                showTitle: <#if val?? && val>1<#else>0</#if>,
                siteId : 1,
            },
            dataType: "html",

            success: function(htmlData) {
                aler("Success"))
        },

        error: function(xhr, status, errorThrown) {
            console.log("Error: " + errorThrown);
            console.log("Status: " + status);
            console.dir(xhr);
        },

        complete: function(xhr, status) {},
    });
});

现在我面临两个问题

1.我真正想要的是一个仅在单击按钮并切换其状态时才被调用的函数。但每次单击封闭的 div 时,我使用的当前函数都会被触发。

2.我无法将正确的 bool 值传递给我的方法。我正在尝试发送 switch 的状态,但我只能在 Controller 类中获取 false 值。

有什么办法可以解决这些问题吗?

最佳答案

Bootstrap 开关 - v3.3.2

这个答案包括如何捕获 switchChange 事件,以及如何调用 AJAX 并根据 AJAX 响应管理开关状态。

HTML:

<input class="form-control btn_changepermission" type="checkbox" data-auid="<?php echo $au['id']; ?>" <?php if( $au['active']==1 ) { echo 'checked="checked"'; } ?>/>

jQuery:

$(document).ready(function() {
    $('.btn_changepermission').bootstrapSwitch({size : 'small'});
    var stopchange = false;
    $('.btn_changepermission').on('switchChange.bootstrapSwitch', function (e, state) {
        var obj = $(this);
        if(stopchange === false){
            $.ajax({
                url: "/admin/ajax/permission/activate",
                dataType: 'json',
                type: "POST",
                quietMillis: 100,
                data: { 
                    auid: $(this).data('auid'),
                },
                success: function(result) {
                    if(result['done'] == true) {
                        alert('Permission changed successfully.');
                    } else {
                        alert('Error:'+result['message']);
                        if(stopchange === false){
                            stopchange = true;
                            obj.bootstrapSwitch('toggleState');
                            stopchange = false;
                        }
                    }
                },
                error: function(result) {
                    alert('Error! Unable to find this agentuser.');
                    if(stopchange === false){
                        stopchange = true;
                        obj.bootstrapSwitch('toggleState');
                        stopchange = false;
                    }
                }
            });
        }
    }); 
});

使用外部变量(stopChange)停止循环switchChange

关于jquery - Bootstrap使用Jquery和ajax切换切换功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30474015/

相关文章:

javascript - javascript跨域请求xml的方法

javascript - 我需要通过 ajax 将文件作为表单数据传递并从 php 读取?

css - 容器内 Bootstrap 中带有图像的单个全宽列的 css 最佳实践?

javascript - 使用jquery设置下拉列表中第一个选项的值

javascript - 按提交时表单不执行任何操作

javascript - 如何复制输入元素及其值?

asp.net - 使用 jQuery 跨域访问 ashx 服务

php - $.ajax 尝试在新加载的 ajax 页面中获取 $_GET 查询变量

javascript - 使用 Ajax 搜索 keyup 和文档就绪

css - 局部 View 中的实例变量