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

问题描述

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

部份代码示例

# htm


# 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 );
                    }
                }
            }
        } );
    }
}

你可能感兴趣的:(部份手机(ios8、ios9) clipboard.min.js 跳出多次复制成功的问题及其解)