如何只定位一个按钮以在单击时更改文本?

How Do I Target Only One Button To Change Text When Clicked?

我正在使用 Clipboard.js 复制我正在构建的网站上的文本。我一切正常,但在有多个按钮的情况下,所有按钮都会触发并显示复制文本的成功消息。

我的页脚中有这个:

<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>

<script type="text/javascript">
var clipboard = new ClipboardJS('.btn');
clipboard.on('success', function(e) {

    $(".btn span").html("<strong>Copied!</strong> To Clipboard");                 
        });  
                </script>

以下代码在文章中:

Example Text <button class="btn" data-clipboard-text="Example Text"> <span class="button-text">Copy to Clipboard</span> </button>

完美的一键复制粘贴。一旦复制按钮的文本更改为 "Copied! To Clipboard." 但是,当有多个按钮并单击一个按钮时,它们都会更改为 "Copied! To Clipboard." 如何仅定位用户单击的按钮?

您遇到的行为是由一个非常模糊的(在您的情况下)CSS 选择器导致的,目标按钮文本要更新。这是因为 .btn span returns 所有带有 class .btn<span> 的按钮的集合。

您应该受益于剪贴板返回的事件对象上的可用数据。这是一个示例事件对象结构:

{
  "action": "copy",
  "text": "Example Text #1",
  "trigger": <button class="btn" data-clipboard-text="Example Text #1">…</button>,
  "clearSelection": function () { [native code] }
}

我冒昧地更新了您的代码片段,以使用您正在单击的确切按钮,并将焦点转移到填充有剪贴板值的输入元素:

$(() => {
  const clipboard = new ClipboardJS('.btn');
  clipboard.on('success', e =>
    $(e.trigger)
    .html("<strong>Copied!</strong> To Clipboard")
    .parent()
    .find('input')
    .val(e.text)
    .focus());
});
label {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>

<label>
  Example Text #1
  <button class="btn" data-clipboard-text="Example Text #1">
    <span class="button-text">Copy to Clipboard</span>
  </button>
  <input placeholder="Ctrl+V here..." />
</label>

<label>
  Example Text #2
  <button class="btn" data-clipboard-text="Example Text #2">
    <span class="button-text">Copy to Clipboard</span>
  </button>
  <input placeholder="Ctrl+V here..." />
</label>