我需要在我的应用程序中,我需要复制呈现给用户的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时,当我尝试将其粘贴到别处时,我仍然会“未定义”。
粘贴后我的文本字段输出,
感谢任何帮助。提前谢谢。
答案 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 %>