【问题标题】:ZeroClipboard events not firingZeroClipboard 事件未触发
【发布时间】:2013-06-06 05:36:04
【问题描述】:

我正在尝试在动态生成 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 对象,并且没有未捕获的异常,但警报永远不会发生,所以我假设“完成”事件永远不会触发

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

感谢所有想法和建议

【问题讨论】:

    标签: jquery twitter-bootstrap zeroclipboard


    【解决方案1】:

    关于 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 将其作为字符串提示

    【讨论】:

    • 谢谢你的建议,我周末去试试
    • 不幸的是,它似乎不起作用,但感谢您的努力,代码比我的更整洁。
    • 我可以看到每个“剪辑[i]”都已创建,并且为电影路径(相同域,不同目录)设置的选项和处理程序是在每个剪辑对象中创建的。但是,当我单击网页中的电影对象时,不会触发事件。电影对象肯定是创建的,因为当我右键单击时,我得到“关于 Adob​​e Flash Player”菜单,而不是通常的 HTML 元素菜单关于如何进一步调试的任何想法?
    • 请阅读github.com/zeroclipboard/ZeroClipboard/blob/master/docs/… clip[i].on('complete' 将在您左键单击线索元素(包含电子邮件地址的跨度)时触发
    • 再次感谢您抽出宝贵时间 Bass - 我已阅读文档,剪辑条目肯定与包含电子邮件地址的 span 元素粘在一起,但该事件似乎没有触发,因为我没有得到任何警报。我将 ZeroClipboard 绑定到电子邮件地址的代码正如您所建议的那样,所以我怀疑现在插入页面底部的 flash 对象存在问题
    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2019-01-31
    • 2013-04-09
    • 2015-07-25
    • 2017-06-25
    相关资源
    最近更新 更多