Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript CopyToClipboard与onclick按钮位于同一行_Javascript_Ruby On Rails_Ruby - Fatal编程技术网

JavaScript CopyToClipboard与onclick按钮位于同一行

JavaScript CopyToClipboard与onclick按钮位于同一行,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我有下面的脚本,它从一个表中复制一个单元格数据(该单元格是隐藏的——JS获取数据,show必须立即显示);它非常有效,但仅在“bbcode2”ID上有效,任何行上的“onclick=“CopyToClipboard2”只影响第一行“bbcode2”ID记录 我不知道如何让JS抓取与onclick按钮相同行上的相同单元格。我尝试添加.closest(#bbcode2),但仍然只抓取bbcode2的第一个实例 如果需要,我可以用动态ID替换bbcode2 <script type="text/

我有下面的脚本,它从一个表中复制一个单元格数据(该单元格是隐藏的——JS获取数据,show必须立即显示);它非常有效,但仅在“bbcode2”ID上有效,任何行上的“onclick=“CopyToClipboard2”只影响第一行“bbcode2”ID记录

我不知道如何让JS抓取与onclick按钮相同行上的相同单元格。我尝试添加.closest(#bbcode2),但仍然只抓取bbcode2的第一个实例

如果需要,我可以用动态ID替换bbcode2

<script type="text/javascript">
function CopyToClipboard2() {
    document.getElementById("bbcode2").style.display = 'block';
    document.getElementById("bbcode2").focus();
    if (document.selection) {
        var range = document.body.createTextRange();
        range.moveToElementText(document.getElementById("bbcode2"));
        range.select().createTextRange();
        document.execCommand("Copy");
    } else if (window.getSelection) {
        window.getSelection().removeAllRanges();
        var range = document.createRange();
        range.selectNode(document.getElementById("bbcode2"));
        window.getSelection().addRange(range);
        document.execCommand("Copy");
    }
    document.getElementById("bbcode2").style.display = 'none';
}

我所做的是使用rails向onclick添加一个ID

CopyToClipboard2(<%=f.id %>)
CopyToClipboard2()
然后用它告诉JS目标ID

<script type="text/javascript">
function CopyToClipboard2(clicked_id) {
    document.getElementById(clicked_id).style.display = 'block';
    document.getElementById(clicked_id).focus();
    if (document.selection) {
        var range = document.body.createTextRange();
        range.moveToElementText(document.getElementById(clicked_id));
        range.select().createTextRange();
        document.execCommand("Copy");
    } else if (window.getSelection) {
        window.getSelection().removeAllRanges();
        var range = document.createRange();
        range.selectNode(document.getElementById(clicked_id));
        window.getSelection().addRange(range);
        document.execCommand("Copy");
    }
    document.getElementById(clicked_id).style.display = 'none';
}

功能CopyToClipboard2(单击\u id){
document.getElementById(单击了)。style.display='block';
document.getElementById(单击了)。focus();
if(文档选择){
var range=document.body.createTextRange();
range.moveToElementText(document.getElementById(单击的id));
range.select().createTextRange();
文件。执行命令(“副本”);
}else if(window.getSelection){
getSelection().removeAllRanges();
var range=document.createRange();
range.selectNode(document.getElementById(单击的id));
window.getSelection().addRange(范围);
文件。执行命令(“副本”);
}
document.getElementById(单击了)。style.display='none';
}


处理:)

首先,在函数的第一行,在变量中捕获
document.getElementById(“bbcode2”)。
而不是对同一对象的多个DOM查询。然后在此函数中的其他任何位置使用它。使用相同的“ID”“同一页面上多次出现无效html,您可能可以使用一个类,然后使用最近的函数来获取相关单元格。如果你的应用程序上有jQuery,那么这个代码可以变得更小/更干净谢谢到目前为止的帮助-我已经做了编辑,但仍然需要帮助,请!还有什么需要帮忙的吗?
<script type="text/javascript">
function CopyToClipboard2(clicked_id) {
    document.getElementById(clicked_id).style.display = 'block';
    document.getElementById(clicked_id).focus();
    if (document.selection) {
        var range = document.body.createTextRange();
        range.moveToElementText(document.getElementById(clicked_id));
        range.select().createTextRange();
        document.execCommand("Copy");
    } else if (window.getSelection) {
        window.getSelection().removeAllRanges();
        var range = document.createRange();
        range.selectNode(document.getElementById(clicked_id));
        window.getSelection().addRange(range);
        document.execCommand("Copy");
    }
    document.getElementById(clicked_id).style.display = 'none';
}