1

我正在尝试在动态生成 HTML 的页面上使用最新版本的 ZeroClipboard 插件。我尝试了几种不同的实现方式,但它们都具有相同的整体效果。我似乎最终得到了一个包含 flash 元素的页面,因为当我右键单击适当的元素时,我得到了弹出窗口“关于 Flash Player” - 但我也在同一个弹出窗口中看到“电影未加载”

我正在使用 JQuery 1.9.1 和 Twitter Bootstrap 2.3.1。我的 Flash 插件是 v11.7.700.202。我的网络服务器是 IIS7.5

我用来动态生成 HTML 的代码在读取用户 ID 数组的循环中,如下所示:

str=str+ '<span class="bMail_address" id=span-"'+
  st.EmailAddresses[i]+
  '" data-clipboard-text="'+
  st.EmailAddresses[i]+
  '@mydomain.com">'+
  st.EmailAddresses[i] +
  "@mydomain.com&nbsp;&nbsp;</span>";

在遍历数组并输出结果字符串后,我尝试添加 ZeroClipboard 内容,如下所示:-

// bind ZeroClipboard
$('.bMail_address').each (function() {
    // read text to copy from the data-clipboard-text attribute
    var msg=$(this).attr('data-clipboard-text');

    //create ZeroCiplboard object
    var clip = new ZeroClipboard();

    // set the text to copy
    clip.setText(msg);

    // setup event handlers
    clip.on('complete', function (client, text) {
        alert("copied: "+text+ "to clipboard");
    });

    clip.on( 'noflash', function ( client, args ) {
        alert("You don't support flash");
    });

    // glue the object to the element   
    clip.glue($(this)); 

});

使用 Chrome 调试工具,我可以看到通过循环为所有新创建的对象创建新的 ZeroClipboard 对象的迭代,并且没有未捕获的异常,但警报永远不会发生,所以我假设“完成”事件永远不会触发

我确定我犯了一些简单的菜鸟错误,但我就是看不到

感谢所有的想法和建议

4

1 回答 1

2

关于 flash 错误:通过添加以下内容使“ZeroClipboard.swf”文件可用于浏览器:

 `ZeroClipboard.setDefaults( { moviePath: 'http://YOURSERVER/path/ZeroClipboard.swf' } );`

另见:https ://github.com/zeroclipboard/ZeroClipboard/blob/master/docs/instructions.md

其次,您想在剪贴板中添加什么以及何时添加?

什么(粘贴)将是文本,何时是事件(单击按钮)。

Glue() 将向您粘合的 dom 级别元素添加一个单击事件。如果元素有一个“数据剪贴板文本”,它的值将被胶水使用(你不必设置它)。

示例:单击时将电子邮件地址添加到剪贴板(将为每个电子邮件地址创建一个剪辑):

<script>

ZeroClipboard.setDefaults( { moviePath: 'ZeroClipboard-master/ZeroClipboard.swf' } );   

$(function () {

    st = {}
    st.EmailAddresses = Array('test','test2','test3'); 
    $.each(st.EmailAddresses,function(i,emailadres)
    {

      str = '<span class="bMail_address" id=span-"'+
      emailadres+
      '" data-clipboard-text="'+
      emailadres+
      '@mydomain.com">'+
      emailadres +
      "@mydomain.com&nbsp;&nbsp;</span>";

       $('.container').append(str);

    });

    var clip = new Array(); 
    // bind ZeroClipboard
    $('.bMail_address').each (function(i,email) {
    //create ZeroCiplboard object
    clip[i] = new ZeroClipboard();

    clip[i].on('complete', function (client, text) {
    alert("copied: "+ text.text+ " to clipboard");
    });

    clip[i].glue(email); 
    });


})
</script>

注意:oncomplete 函数中的 text 是一个对象,所以使用 text.text 将其作为字符串来提醒

于 2013-06-06T08:19:13.157 回答