javascript - Bootstrap 弹出窗口不保存复选框

标签 javascript jquery twitter-bootstrap twitter-bootstrap-3 popover

我需要计算 Bootstrap 3 上弹出窗口内容上的 :checked 复选框数量。

问题是当我更改复选框并关闭弹出窗口时,它不会保存。我尝试重新安装/销毁弹出窗口并动态更改 content 选项,但没有结果。

我还尝试创建空数组并手动计算选中的复选框,将每个新检查推送到数组,但再次没有结果,这是非常困难的方法。

js:

$(function () {
    $('.item').popover({
        placement: 'bottom',
        html: true,
        content: function () {
            return $(this).find('.filters').html();
        }
    });

    $('#count').click(function() {
        var filter = $('.item input[type=checkbox]:checked').map(function () {
            return this.value;
        }).get();

        $('#res').text(filter);
    });
});

html:

<div class="item">
    <a href="#" onclick="return false;" class="btn btn-primary">click for popover</a>
    <div class="filters">
        <ul class="list-unstyled">
            <li>
                <input type="checkbox" value="1" checked="checked" id="filter1">
                <label for="filter1">Filter 1</label>
            </li>
            <li>
                <input type="checkbox" value="2" checked="checked" id="filter2">
                <label for="filter2">Filter 2</label>
            </li>
            <li>
                <input type="checkbox" value="3" id="filter3">
                <label for="filter2">Filter 3</label>
            </li>
        </ul>
    </div>
</div>

<br>
<a href="#" onclick="return false;" id="count">count</a>
<div id="res"></div>

CSS:

.filters {
    display: none;
}
.popover-content {
    width: 100px;
}

更新:http://jsfiddle.net/sirjay/0vetvfpz/

最佳答案

当您创建弹出窗口时,您会复制 .filters div 的内容,这意味着您拥有它两次。一个被隐藏的,因为它位于 .filters div 中,而隐藏的原因是 .filters { 显示:无; }

以及在弹出窗口中可见的一个。

当您计数时,您实际上是在计算不可见的复选框,而不是弹出窗口中的复选框。弹出窗口是在 .item div 外部创建的,因此与 .item input[type=checkbox]:checked 选择器不匹配。将其更改为 .popover input[type=checkbox]:checked 可能会达到您想要的效果。

更新

我做了一些研究,发现创建者没有考虑到这个用例。所以做起来真的很棘手。但我已经设法为您找到解决方案:

$(function () {
    $('.item').popover({
        placement: 'bottom',
        html: true,
        content: function () {
            return $(this).find('.filters').html();
        }
    });

    //Magic
    $(".item").on("shown.bs.popover",function(){
        $(".popover-content input").on("change",function(){
            if(this.checked){
                this.setAttribute("checked","checked");
            }else{
                this.removeAttribute("checked");
            }
            $(".filters").html($(".popover-content").html());
        });
    });


    $('#count').click(function() {
        var filter = $('.item input[type=checkbox]:checked').map(function () {
            return this.value;
        }).get();

        $('#res').text(filter);
    });
});

关于javascript - Bootstrap 弹出窗口不保存复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196155/

相关文章:

php - 使用 jQuery 使用 POST 数据重定向单个按钮单击的两个页面

html - 如何在工具提示中添加图片和文字?

ruby-on-rails - 让 simple_form 尊重我的空白/空标签

javascript - 旋转木马幻灯片和导航栏更改之间的 Bootstrap 延迟

javascript - Node.js 中的域 - 它是否保留并修改父上下文?

javascript - Electron - 为什么与 HTML 文件相比,通过本地主机加载主窗口时会有很大的延迟?

jquery - AJAX 请求如何在 Android 2.0 和 Android 2.2 上工作

javascript - 如何以最简单的方式进行星级评定?

javascript - 重新加载 KeyDown 和 Click 事件后仅在第二次单击后有效

javascript - 在不使用大量 javascript 的情况下很好地分解成一个额外的 div?