在一个子页面里想实现一键复制到剪贴版的功能,使用zclip插件,用jquery的方式实现时出现了诡异问题。复制功能平时正常,当页面中所列的内容过多时,一键复制的功能失效。

这个问题相当不好定位,先说结论:zclip工作的机制是将一个透明的flash ZeroClipboard.swf 覆盖到要点击的元素<a>之上,点击动作作用于flash。该flash的position设置为absolute,当子页面内容过长时,拉动滚动条,flash并不会随要点击的元素移动,因此点击该元素不会有任何效果。

解决方法:在要点击的元素外加一层<div>,设置position:relative

一开始我以为是信息量大时,由于后台处理的关系,响应时间过长导致zclip这个函数和元素出现加载顺序的问题。在js里加了一个$("#copy").click(function(){alert()}),点击时运行正常,排除。

接着将后台的返回值写死,复制功能依然失效,判断与后台的运行速度无关。将前台从后台动态取值的部分写死,问题依然存在。排除后台问题,定位为前台。

这时已经怀疑是zclip可能有bug。打开浏览器的开发工具,发现复制有效的场景中鼠标移到<a>上时,<a>的class变为hover,而无效的场景中没有这个变化,两者都有一个由zclip生成的embed元素。有点怀疑是无效场景中元素<a>与embed没有作关联,在<a>的class中加入hover,依然无效。观察两个embed元素,发现只有top值不同,解释为无效场景中页面信息多于有效场景,因此元素普遍下移。

我觉得可能要到zclip的工作原理中去找原因。看到说flash会覆盖在元素之上,再联想两个场景中唯一不同的就是top值,开始怀疑这个问题与位置有关。再想起在正确场景中,点击元素时开发工具会同时显示<a>与embed;而在无效场景中下面的embed没有反应,说明embed和<a>不在同一个位置。我判断最有可能的就是生成页面时原始元素与embed位置相同,而拉动滚动条的时候embed没有被拉上去。要验证的话应该可以发现当信息量大到足够使子页面产生滚动条时复制就会失效,这一步直接跳过了。

google了一下发现有老外也在讨论这个问题,并提出以上解决方案,按照该方案修改成功。

reference:http://stackoverflow.com/questions/8673681/zclip-not-working-inside-table

zclip笔记:解决zclip失效问题的更多相关文章

  1. 2.26 js解决click失效问题

    2.26 js解决click失效问题 前言有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应.这种问题遇到了,是比较头疼的,因为没任何报错,只是click事件失效了.本篇用2种方法解决这种诡 ...

  2. Nessus如何解除IP限制以及解决重启失效的后遗症

    Nessus如何解除IP限制以及解决重启失效的后遗症 1.解除IP限制 1.获取当前plugins的版本号. https://plugins.nessus.org/v2/plugins.php 2.停 ...

  3. eclipse 解决插件失效

    昨天系统崩溃,重装系统后eclipse突然对links方式加载插件失效.用尽了网上各种解决方法,始终不行.在%eclispe_dir%/configration/org.eclipse.update/ ...

  4. spring mvc3 静态文件放在WEB-INF下无法访问解决和解决@Controller失效问题

    今天整合spring+mybatis+easyui碰到的问题 将easyui放在WEB-INF下后无法访问, 解决:需配置<mvc:resources mapping="/easyui ...

  5. Selenium2+python自动化46-js解决click失效问题

    前言 有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应.这种问题遇到了,是比较头疼的,因为没任何报错,只是click事件失效了. 本篇用2种方法解决这种诡异的点击事件失效问题 一.遇到的问 ...

  6. Selenium2+python自动化46-js解决click失效问题【转载】

    前言 有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应.这种问题遇到了,是比较头疼的,因为没任何报错,只是click事件失效了. 本篇用2种方法解决这种诡异的点击事件失效问题 一.遇到的问 ...

  7. Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题

    同时在工程中引入了多个第三方jar包,导致调用的方法数超过了android设定的65536个(DEX 64K problem),进而导致dex无法生成,也就无法生成APK文件. 解决办法如下: 1.谷 ...

  8. 解决session失效之后登陆后重新返回之前的页面

    在全局拦截器设置保存之前的url存入session中 登陆之后的地址再重session中存 request只用作一次请求 如果页面跳转几次的话原来的url就不存在了建议存在session @Overr ...

  9. 学习笔记------------解决margin塌陷

    首先来解释一下什么是marg塌陷? 父子嵌套元素垂直方向的margin,父子元素是结合在一起的,他们两个会取其中最大的值 正常情况下应该是父级元素相对于浏览器定位,而子级元素相对于父级元素定位 但是m ...

随机推荐

  1. Spring+SpringMVC+MyBatis+Redis框架学习笔记

    在Java互联网中,以Spring+Spring MVC+MyBatis (SSM) 作为主流框架. SSM+Redis的结构图 在这种框架系统中: Spring IoC 承担了一个资源管理.整合.即 ...

  2. http客户端缓存

    这篇文章写得比较,点击查看

  3. Java进制间的转换

    最近学习了Java间的进制转换,记录下自己的学习心得,希望可以帮到前来查看的朋友们,如果有不懂的地方可以在下方评论留言,我们一起学习进步,只有自己足够强大才能弥补不足,多学习, 任意进制到十进制的转换 ...

  4. ClassNotFoundException: http.nio.NHttpClientEventHandle

    解决方案是打开maven仓库中的jar包看看报错的类所对应版本的类存在不存在,若不存在就换个版本的jar包

  5. 【2017】KK English

    2017/11/24 Regardless of the enormous amount of photos shared on Wechat or Face book, modern city dw ...

  6. CSU-1986 玄学

    题目链接 http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=1986 题目 Description 阴阳师子浩君,最近从<初等数论 ...

  7. 1106 Lowest Price in Supply Chain (25 分)(树的遍历)

    求叶子结点处能活得最低价格以及能提供最低价格的叶子结点的个数 #include<bits/stdc++.h> using namespace std; ; vector<int> ...

  8. tomcat集群和负载均衡的实现(session同步)

      (一)环境说明 (1)服务器有4台,一台安装apache,三台安装tomcat (2)apache2.0.55.tomcat5.5.15.jk2.0.4.jdk1.5.6或jdk1.4.2 (3) ...

  9. UVALive 4764 简单dp水题(也可以暴力求解)

    B - Bing it Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status ...

  10. VB.NET——报表

    在工具箱查找ReportViewer,添加. 选择设计新报表: 排列字段,布局的步骤省略. 完成. 接下来,我们可以更改中文标题,设置背景色等,让界面看起来更美观. 如果需要添加参数,所传递的参数要与 ...