部份手机(ios8、ios9) clipboard.min.js 跳出多次复制成功的问题及其解

问题描述

第一次进来打开页面弹窗,点击 复制按钮 弹出提示 复制成功 这是没问题的,但是关闭弹窗(这时候的弹窗是 remove 掉的)再打开弹窗,再次点击复制的时候会弹出两次复制成功 ,根据代码调试实践总结这是因为第一次来 var copy = new Clipboard( elem ) 的时候实例化了一次,第二次再打开弹窗再点击复制的时候又 var copy = new Clipboard( elem ) 了一次,所以说再次点击会弹出两次 复制成功,如果每次关闭弹窗前不去销毁 copy 这一实例的话,每次打开弹窗就会实例化 +1,所以要想解决这个问题的话必须每次关掉弹窗的时候要销毁这一实例。具体的实现方法参考下面的代码:

部份代码示例

# htm
<script type="text/template" id="tplCardNum">
    <div class="vodal-card vodal-common">
        <span class="icon-bei"></span>
        <h3>恭喜您获得<span>【{$gift_name}】</span></h3>

        <table border="1" cellspacing="0" cellpadding="0" align="center" class="vodal-card-table">
            <tr>
                <td width="30%">礼包序列号</td>
                <td width="40%" class="break-word">{$activation_code}</td>
                <td width="30%"><a href="javascript:;" data-clipboard-text="{$activation_code}" id="vodalCardCopy_{$activation_code}" class="btn stroke">复制</a</td>
            </tr>
        </table>

        <p class="card-tips">请在今天内登录游戏进行领取</p>
    </div>
</script>

# js
var t = {
    copyCache: {},
    copy: function( elem ) {
        var _this = this;
        _this.copyCache[elem] = new Clipboard( elem );

        _this.copyCache[elem].on( "success", function( e ) {
            $( elem ).text( "已复制" );
            e.clearSelection();
        } );
        _this.copyCache[elem].on( "error", function(a) {
            $.signDialog.alert( "由于系统不支持,请手动复制礼包码" );
        });
    },

    _getMyReward: function() {
        var _this = this;

        $.signUtil.callApi( {
            url: "url",
            type: "post",
            successCall: function( res ) {
                if( res ) {
                    if( +res.code === 1 ) {
                        if( res.data.length > 0 ) {
                            $.signDialog({
                                content: $.signUtil.getHtml( _this.tplRewardMy, {
                                    REWARD_CONTENT: $.sdkUtil.T( _this.tplRewardTr, res.data )
                                } ),
                                closeBtnState: true,
                                dialogWidth: "80%",
                                buttons: {
                                    "确定": {
                                        class: "vodal-confirm-btn",
                                        fn: function( name, obj ) {
                                            obj.destroy();

                                            // 关闭弹窗,销毁 Clipboard 复制,不然有些手机(ios8、ios9)会重复复制
                                            for( var i = 0, len = res.data.length; i < len; i++ ) {
                                                (function(j) {
                                                    _this.copyCache["#vodalCardCopy_" + res.data[j].activation_code].destroy();
                                                })(i);
                                            }
                                        }
                                    }
                                }
                            });

                            for( var i = 0, len = res.data.length; i < len; i++ ) {
                                (function(j) {
                                    _this.copy( "#vodalCardCopy_" + res.data[j].activation_code );
                                })(i);
                            }

                        } else {
                            alert( "您暂时还没有奖品~" );
                        }
                    } else {
                        alert( res.message );
                    }
                }
            }
        } );
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,792评论 0 17
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,964评论 2 17
  • 万宝路x阅读 355评论 2 6
  • 张安琪 20几的姑娘,加油!这句话送给自己,也送给和我一样的你们。现在的我们可能还偶尔迷茫,偶尔忧伤,偶尔没自信。...
    张琪琪_长安阅读 2,508评论 11 73
  • 这是一个什么样的故事,其实没有人会知道。 暹粒的冬季还是很炎热,这里不大,寺庙众多,同时,也很安全。几乎很少有人会...
    河马先生DaDa阅读 345评论 0 1