Clipboard.js使用多个按钮更改复制成功时的按钮文本

时间:2019-01-19 19:06:06

标签: jquery clipboard.js

我正在尝试将clipboard.js按钮上的文本更改为成功后说“已复制”。

但是我遇到的问题是,我在同一页面上有多个按钮,而我正在努力定位所单击的按钮。我收到错误未捕获的TypeError:非法构造函数

我很想知道如何更好地处理这个问题。

jQuery

$('.copy-link').on('click', function() {

  var copy_id = $(this).attr('id');

  var clipboard = new Clipboard( '#' + copy_id );

  clipboard.on('success', function(e) {
    $(this).text('Copied');
    setTimeout(function() {
      $(this).text('Copy link')
    }, 2000);
  });

});

HTML

<button id="copy_1" data-clipboard-text="Test 1" class="copy-link">Copy link</button><br/>
<button id="copy_2" data-clipboard-text="Test 2" class="copy-link">Copy link</button><br/>
<button id="copy_3" data-clipboard-text="Test 3" class="copy-link">Copy link</button><br/>
<button id="copy_4" data-clipboard-text="Test 4" class="copy-link">Copy link</button><br/>
<button id="copy_5" data-clipboard-text="Test 5" class="copy-link">Copy link</button><br/>

jsFiddle

请参阅上面的我的代码作为小提琴 https://jsfiddle.net/joshmoto/akh39dtc/

任何建议将不胜感激。

3 个答案:

答案 0 :(得分:1)

这是由于我使用箭头功能的范围。 ES6箭头函数无法绑定到this关键字,因此它将在词法上上升到一个范围,并在定义它的范围内使用this的值。可能对您有帮助

$('.copy-link').on('click', function() {

  var copy_id = $(this).attr('id');

  var clipboard = new Clipboard( '#' + copy_id );

  clipboard.on('success', (e)=> {        // use arrow function
    $(this).text('Copied');
    setTimeout(()=> { // use arrow function

      $(this).text('Copy link')
    }, 2000);
  });

});

答案 1 :(得分:1)

let cb = new ClipboardJS('.copy-link');
$('.copy-link').on('click', function() {
  //get a reference to the JQUERY object of the current button
  let theButton = $(this);
  var copy_id = $(this).attr('id');

  var clipboard = new ClipboardJS( '#' + copy_id );

  clipboard.on('success', function(e) {
    //use the .text method of the Jquery object
    theButton.text('Copied');
    setTimeout(function() {
    //same again
      theButton.text(e.text);
    }, 2000);
  });

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="copy_1" data-clipboard-text="Test 1" class="copy-link">Copy link</button><br/>
<button id="copy_2" data-clipboard-text="Test 2" class="copy-link">Copy link</button><br/>
<button id="copy_3" data-clipboard-text="Test 3" class="copy-link">Copy link</button><br/>
<button id="copy_4" data-clipboard-text="Test 4" class="copy-link">Copy link</button><br/>
<button id="copy_5" data-clipboard-text="Test 5" class="copy-link">Copy link</button><br/>

var clipboard = new Clipboard( '#' + copy_id ); 

需要成为

var clipboard = new ClipboardJS( '#' + copy_id ); 

编辑:如果您的意思是

,我有点困惑我拥有正确的库

https://clipboardjs.com/

我上面的代码应该可以工作。

很抱歉,我很忙,我将在最后一次更新答案,并说明如何/为什么。

答案 2 :(得分:0)

    $(document).ready( function() {
        $(".copy-link").click(function(){
            $(this).html("copied");
        });
    });
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

<button id="copy_1" data-clipboard-text="Test 1" class="copy-link">Copy link</button><br/>
<button id="copy_2" data-clipboard-text="Test 2" class="copy-link">Copy link</button><br/>
<button id="copy_3" data-clipboard-text="Test 3" class="copy-link">Copy link</button><br/>
<button id="copy_4" data-clipboard-text="Test 4" class="copy-link">Copy link</button><br/>
<button id="copy_5" data-clipboard-text="Test 5" class="copy-link">Copy link</button><br/>