如何将 SweetAlert 与 clipboard.js 库一起使用?

How to use SweetAlert with clipboard.js library?

我正在尝试使用 SweetAlert with the clipboard.js 库。 当用户在 SweetAlert 上确认时,我尝试模拟点击 HTML 按钮,但它不起作用。

这是我尝试做的事情:

我的HTML:

<button class="btn btn-primary" id="copyBtn" data-clipboard-target="#info_block" onclick="copyText();">
    Copy Text!
</button>

<div id="info_block" name="info_block">
    Some example text.
</div>

我的JavaScript函数:

var clipboard = new Clipboard('.btn');
clipboard.on('success', function(e) {
    console.log(e);
});
clipboard.on('error', function(e) {
    console.log(e);
});

以及我的 SweetAlert 的结构:

swal({
  title: "Copy the text?",
  text: "Are you sure you want to copy it to clipboard?",
  type: "warning",
  showCancelButton: true,
  confirmButtonColor: "#DD6B55",
  confirmButtonText: "Yes, copy it!",
  closeOnConfirm: false
},
function(){
  $("#copyBtn").click(); // simulates click on html button.
  swal("Copied!", "The text has been copied.", "success");
});

它在没有甜蜜警报的情况下工作正常,但它无法模拟复制按钮上的点击,我想不出办法让它工作。

你的甜蜜警报正在呼叫 $("#copyBtn").click(); 我不确定是否有必要。

无论如何,您已经在此按钮中设置了 onclick="copyText();",但从未定义过 copyText 函数。

定义函数或删除 onclick 属性。

这是工作代码,其中定义了一个空 copyText 函数。

var clipboard = new Clipboard('.btn');
clipboard.on('success', function(e) {
    console.log('Copied text: ' + e.text);
});
clipboard.on('error', function(e) {
    console.log(e);
});
function copyText() {

}

swal({
  title: "Copy the text?",
  text: "Are you sure you want to copy it to clipboard?",
  //type: "warning",
  showCancelButton: true,
  confirmButtonColor: "#DD6B55",
  confirmButtonText: "Yes, copy it!",
  closeOnConfirm: false
},
function(){
  $("#copyBtn").click(); // simulates click on html button.
  swal("Copied!", "The text has been copied.", "success");
}
);
/*fit into snippet window*/
.sweet-alert { margin: auto; transform: scale(.75); }
<link href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert-dev.js"></script>
<script src="https://cdn.jsdelivr.net/npm/clipboard@1/dist/clipboard.min.js"></script>


<button class="btn btn-primary" id="copyBtn" data-clipboard-target="#info_block" onclick="copyText();">
    Copy Text!
</button>

<div id="info_block" name="info_block">
    Some example text 
</div>

如果您想在按钮点击时触发警报,请将 swal 函数放在您在 onclick 中定义的函数中:

你的甜蜜警报正在呼叫 $("#copyBtn").click(); 我不确定是否有必要。

无论如何,您已经在此按钮中设置了 onclick="copyText();",但从未定义过 copyText 函数。

定义函数或删除 onclick 属性。

这是工作代码,其中定义了一个空 copyText 函数。

var clipboard = new Clipboard('.btn');
clipboard.on('success', function(e) {
  console.log('Copied text: ' + e.text);
});
clipboard.on('error', function(e) {
  console.log(e);
});

function copyText() 
{
  swal({
      title: "Copy the text?",
      text: "Are you sure you want to copy it to clipboard?",
      //type: "warning",
      showCancelButton: true,
      confirmButtonColor: "#DD6B55",
      confirmButtonText: "Yes, copy it!",
      closeOnConfirm: false
    },
    function() {
      swal("Copied!", "The text has been copied.", "success");
    });
}
/*fit into snippet window*/

.sweet-alert {
  margin: auto;
  transform: scale(.75);
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert-dev.js"></script>
<script src="https://cdn.jsdelivr.net/npm/clipboard@1/dist/clipboard.min.js"></script>


<button class="btn btn-primary" id="copyBtn" data-clipboard-target="#info_block" onclick="copyText();">
    Copy Text!
</button>

<div id="info_block" name="info_block">
  Some example text
</div>

有了这个变体,可以使用更新的 SweetAlert2.js。

function copyText(){

    var copy = $('.copy_text').val();
    $('.copy_text').select();
    document.execCommand('copy');
    
    Swal.fire({
        icon: 'success',
        title: 'Text copied to clipboard',
        text: copy,
        showConfirmButton: false,
        timer: 3000
    });
    
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@9"></script>

<input type="text" class="copy_text" value="Hello World!">
<button onclick="copyText()">Copy to clipboard</button>