2015-06-02 218 views
0

我有需要在我的应用程序中,我需要复制呈现给用户的URL。我从这个JSFiddle使用JS。将内容复制到剪贴板

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

我show.js.erb文件,

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

在上面的代码的功能,对点击确定出现的消息来执行。在屏幕上对Ctrl + C进行@display值操作时,如果我尝试将其粘贴到其他位置,仍然会出现“未定义”。

我粘贴文本框后输出,

enter image description here

任何帮助表示赞赏。提前致谢。

+0

它在我的结尾正确显示。你想在哪里粘贴复制的文本? – TarunJadhwani

+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 %> 

或者你可以完全消除れ,只是通过文本复制:

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 %> 
+0

感谢Brijesh,我现在可以将@display值传递给剪贴板功能。非常感谢。 :) –