Clipboard.js 使用多个按钮在复制成功时更改按钮文本
Clipboard.js change button text on copy success with multiple buttons
我正在尝试更改 clipboard.js 按钮上的文字,以便在成功时显示 'copied'。
但我遇到的问题是我在同一页面上有多个按钮,而且我很难定位点击的按钮。我收到一个错误 Uncaught TypeError: Illegal constructor
我很想知道如何更好地处理这个问题。
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
将我上面的代码视为 fiddle
https://jsfiddle.net/joshmoto/akh39dtc/
如有任何建议,将不胜感激。
这是因为我使用箭头函数的范围。 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);
});
});
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 );
编辑:我有点困惑我有正确的库,如果你的意思是
我上面的代码应该可以工作。
对不起,我很忙我会最后一次更新答案并解释how/why。
$(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/>
我正在尝试更改 clipboard.js 按钮上的文字,以便在成功时显示 'copied'。
但我遇到的问题是我在同一页面上有多个按钮,而且我很难定位点击的按钮。我收到一个错误 Uncaught TypeError: Illegal constructor
我很想知道如何更好地处理这个问题。
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
将我上面的代码视为 fiddle https://jsfiddle.net/joshmoto/akh39dtc/
如有任何建议,将不胜感激。
这是因为我使用箭头函数的范围。 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);
});
});
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 );
编辑:我有点困惑我有正确的库,如果你的意思是
我上面的代码应该可以工作。
对不起,我很忙我会最后一次更新答案并解释how/why。
$(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/>