2

我在这里有一个工作示例 http://enginiku.byethost17.com/stack.php

我想要的是根据单击的块将数据复制到剪贴板。这工作得很好。但是问题是我需要单击块,将光标从块上移开,再次单击,然后才会复制数据。我知道可能是因为该区域变成了 Flash 对象。

但我希望它只需单击一次(第一次)即可复制数据。请提出出路!

这是我的脚本

<script>
function copytocb(el){
var id = $(el).attr('id');
ZeroClipboard.setDefaults({moviePath:'http://enginiku.byethost17.com/ZeroClipboard.swf'});
var clip = new ZeroClipboard($('#'+id));
clip.on('complete',function(client,args){
alert('Copied');
});
}
</script>

这是相关的html

<div class="central">
    <div class="maincontent">
        <div class="leftcontent">
            <span id="ss">Some text</span>
        </div>
        <div class="rightcontent">
            <span id="block1" onclick="copytocb(this)" data-clipboard-text="Img1">Img</span>
            <span id="block2" onclick="copytocb(this)" data-clipboard-text="Img2">Img</span>
            <span id="block3" onclick="copytocb(this)" data-clipboard-text="Img3">Img</span>
            <span id="block4" onclick="copytocb(this)" data-clipboard-text="Img4">Img</span>
            <span id="block5" onclick="copytocb(this)" data-clipboard-text="Img5">Img</span>
        </div>
    </div>
</div>
4

1 回答 1

2

一旦clip创建并分配给有问题的跨度,单击它会产生所需的结果。您是否尝试过将copytocb()函数的内容放入文档就绪部分 ( $(function(){}))?

编辑:

 $(document).ready(function() {
   ZeroClipboard.setDefaults({moviePath:'http://enginiku.byethost17.com/ZeroClipboard.swf'});
   var DOMarr=$('#rightcontent span').map(function(){return this;});
   var clip = new ZeroClipboard(DOMarr);
   clip.on('load',function(client,args){alert("Clipboard is ready for action.");});
 })

另外:忽略onclick="copytocb(this)"跨度本身。这应该不是必需的,因为覆盖的 Flash 电影将寻找点击事件 itelf(希望如此)。

刚刚测试了这个。还请查看他们页面的给定示例。

2.编辑mouseover:剪贴板文本也可以通过在底层spans上设置适当的事件来动态生成,例如

$('#rightcontent span').mouseover(function(){
   var clip.setText($(this).text());
   console.log(clip.options.text); // just to show the effect ...
});

我也尝试mousedown在相同的元素上使用,但没有奏效,因为剪辑事件将始终在跨度的 mousedown 事件之前触发。

于 2013-07-31T06:37:37.327 回答