Bootstrap 模式不适用于 Clipboard.js(在 Firefox 上)

Bootstrap modal does not work with Clipboard.js (on Firefox)

我在 bootstrap 模式上有一个按钮,它应该将一些数据(显示在模式中)复制到剪贴板(使用 clipboard.js)。

Modal好像不支持这个动作

当触发上述事件的按钮超出模式时,它就像一个魅力! 因此,我决定让模态按钮触发模态之外的另一个隐藏按钮,以便可以完成操作。但它仍然不起作用! 请帮助,下面的代码和示例。

https://jsfiddle.net/w6rL9sqz/2/

js

<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="js/clipboard.js"></script>
<script src="js/clipboard.min.js"></script>
<script>
    $( document ).ready(function() 
    {

        //tooltip
        $('.trigger-button').tooltip({
            trigger : 'click'
        });

        $('.trigger-button').click(function()
        {
            $('.trigger-button').tooltip('show');
            setTimeout(function()
            { 
                $('.trigger-button').tooltip('hide'); 
            }, 
            2000);  
            $('#copy-button').trigger('click');
        });

        // copy to clipboard
        var yii2_ids = 1234567890;
        $('#copy-button').click(function(){
            var clipboard = new Clipboard('#copy-button', {
                text: function() 
                {
                    return yii2_ids;
                }
            });
            clipboard.on('success', function(e) {
                console.log(e);
            });
        });
    });
</script>

html

<div class="container-fluid margin-top">
<div class="row">
    <div class="col-lg-8 col-lg-offset-2 col-md-8 col-md-offset-2 col-sm-10 col-sm-offset-1 col-xs-12 search-div">
        <div class="row">
            <center>
            <div class="col-lg-2 col-md-2 col-sm-2 col-xs-2">
                <button id="copy-button" class="btn btn-primary" type="button" data-placement="left" class="btn btn-primary" title="Copied to Clipboard" style="display:none;">triggered-hidden</button>
                <button class="btn btn-primary trigger-button trigger-button" type="button" data-placement="left" class="btn btn-primary" title="Copied to Clipboard">Copy to Clipboard</button>
                <textarea></textarea>
            </div>
            </center>
        </div>
        <br />
        <button class="btn btn-primary" data-target="#upload-ebook" data-toggle="modal" type="button">Modal</button>
        <div class="modal fade bs-example-modal-lg"  id="upload-ebook" tabindex="-1" role="dialog">
            <div class="modal-dialog modal-lg">
                <div class="modal-content">
                    <div class="modal-body">
                        <p style="text-align:left; background: black; color: white; padiing: 20px;">
                            <samp><b>id = $id</b></samp><br>
                        </p>
                    </div>
                    <div class="modal-footer">
                        <button class="btn btn-primary trigger-button trigger-button" type="button" data-placement="left" class="btn btn-primary" title="Copied to Clipboard">Copy to Clipboard</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

首先,您要创建一个 yii2_ids 变量;

var yii2_ids = 1234567890;

并且 return按原样处理,不覆盖;

var yii2_ids = 1234567890;
$('#copy-button').click(function(){
    var clipboard = new Clipboard('#copy-button', {
        text: function() 
        {
            return yii2_ids;
        }
    });

你需要得到在这个函数中用 jQuery 和 return 写在模态 里的东西。 我在 jsFiddle.

中为您做了一个工作示例

编辑: 如果代码仍然无法在 Firefox 上运行但在其他浏览器上运行,则可能是 Firefox 缓存问题,您可以通过完全刷新 (CTRL + F5) 来解决。

我认为你的问题与这个 Clipboard issue 有关,它说:

Bootstrap's modal enforce focus for accessibility reasons but that causes problems with LOTS of third-party libraries, including clipboard.js.

You can turn off this functionality by doing...

Bootstrap 3 $.fn.modal.Constructor.prototype.enforceFocus = function() {}; Bootstrap 4 $.fn.modal.Constructor.prototype._enforceFocus = function() {};

将 Bootstrap 的 enforceFocus 函数设置为空是解决此问题的愚蠢方法。当有其他方法可以修复它时,从另一个库中删除代码不应该是你的选择。

副本在 Bootstrap 模态中不起作用的唯一原因是,为复制文本而创建的虚拟元素附加到模态之外的正文中,正如我们所知,它强制将焦点放在它,或者它的 children。因此,要修复它,我们只需要向 clipboardjs 添加一个容器选项,我们可以向其传递对模态 div 的引用。这样,虚拟元素将附加到焦点范围内,并且能够自身获得焦点以复制文本。

这是不涉及 Bootstrap 的 enforceFocus 的固定代码:https://jsfiddle.net/uornrwwx/

当模态框内有一个复制按钮时,将它传递给模态框的引用:

new Clipboard("button-selector", { container: yourModalHtmlElement });