将内容复制到剪贴板

时间:2015-06-02 11:57:52

标签: javascript ruby-on-rails

我需要在我的应用程序中,我需要复制呈现给用户的URL。我正在使用此JSFiddle中的JS。

我的代码与小提琴的HTML部分略有不同。我使用mscConfirm作为JS消息框。

我的show.js.erb文件,

 <% if @exists == true %>
        mscConfirm("Hold on", 'The file has been shared already, <%= @display %>', function(){
            clipboard(this);
        });
<% end %>

上面代码中的函数是在单击OK执行时显示的消息。在对屏幕中的@display值执行Ctrl + C时,当我尝试将其粘贴到别处时,我仍然会“未定义”。

粘贴后我的文本字段输出,

enter image description here

感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

提供的clipboard()函数接受DOM元素。您必须修改功能以满足您的要求。

function clipboard(el, txt) {
  // deselect all
  var selected = document.getElementsByClassName("selected");
  for (var i = 0; i < selected.length; i++) {
      selected[i].className = '';
  };
  el.className = 'selected';
  clip.setValue(txt);
}

在这里,您必须明确传递要复制的文本。在mscConfirm的okCallback中,this不引用任何元素。

所以根据我的说法,你的函数调用应该是这样的:

<% if @exists == true %>
    mscConfirm("Hold on", 'The file has been shared already, <%= @display %>', function(){
        clipboard(document.getElementById("DOMnodeID"), @display);
    });
<% end %>

或者您可以完全删除DOMnode并只传递要复制的文本:

function clipboard(txt) {
  // deselect all
  var selected = document.getElementsByClassName("selected");
  for (var i = 0; i < selected.length; i++) {
      selected[i].className = '';
  };
  clip.setValue(txt);
}

然后你的函数调用应该是这样的:

<% if @exists == true %>
    mscConfirm("Hold on", 'The file has been shared already, <%= @display %>', function(){
        clipboard(@display);
    });
<% end %>