Clipboard.js在Bootstrap模式下不起作用

sdv*_*ksv 3 javascript jquery twitter-bootstrap clipboard.js

我正在尝试使用Clipboard.js复制输入值:https : //clipboardjs.com/。输入位于模式中:

http://codepen.io/Deka87/pen/eBJOKY

new Clipboard('#copy', {
    text: function(trigger) {
        return $("#copy-input").val();
    }
});
Run Code Online (Sandbox Code Playgroud)

当它在模式之外运行时,当输入和复制按钮位于模式窗口中时,它将无法工作。我尝试在模式窗口打开后初始化剪贴板功能:

$(".modal").on("shown.bs.modal", function() {
  new Clipboard('#copy', {
      text: function(trigger) {
          return $("#copy-input").val();
      }
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,它没有解决问题。有任何想法吗?

Eri*_*cia 8

您必须设置容器

new ClipboardJS('.btn', {
    container: document.getElementById('modal')
});
Run Code Online (Sandbox Code Playgroud)

请参阅此页面https://clipboardjs.com/ 的“高级使用”部分。


小智 6

我遇到了同样的问题,我解决了这个问题,将元素附加到模态而不是document.body.

function copyToClipboard() {
   const el = document.createElement('textarea');
    el.value = 'text to copy';
    document.getElementById('copy').appendChild(el);
    el.select();
    document.execCommand('Copy');
    document.getElementById('copy').removeChild(el);
}
Run Code Online (Sandbox Code Playgroud)

Bootstrap 的模式强制聚焦于可访问性 ( enforceFocus) 原因,但这会导致许多第三方库出现问题

https://github.com/twbs/bootstrap/issues?q=is:issue+enforceFocus+is:closed


小智 5

试试这个分支:http : //codepen.io/anon/pen/NbxWbQ 我忘记删除console.log了,所以忽略它:)

<input type="text" class="form-control" id="copy-input" value="Copied successfully!"/>
    <br />
    <a href="#" id="copy" data-clipboard-target="#copy-input" class="btn btn-default">Copy input content to clipboard</a>
Run Code Online (Sandbox Code Playgroud)

$(".modal").on("shown.bs.modal", function() {
  console.log('a', Clipboard, $('#copy'), $("#copy-input").val());
  var clipboard = new Clipboard('#copy')
});
Run Code Online (Sandbox Code Playgroud)


小智 5

https://github.com/zenorocha/clipboard.js/issues/155#issuecomment-217372642

引导程序 3

$.fn.modal.Constructor.prototype.enforceFocus = function() {};
Run Code Online (Sandbox Code Playgroud)

引导程序 4

$.fn.modal.Constructor.prototype._enforceFocus = function() {};
Run Code Online (Sandbox Code Playgroud)