如果页面上有iframe时,鼠标点击在iframe内时,包含iframe的document是不响应任何事件的,

例如:

$("#iframe1").click(function(){//点击iframe
            alert("点击1");
 });
或者    
 $(function(){//给iframe循环绑定click事件
            for(var n=1;n<=7;n++){
                $("#iframe"+n).bind("click",{n:n}, clickHandler);
            }
            function clickHandler(event) {
                var n = event.data.n;
                alert("点击"+n);
            }
 });

均行不通。

所以需要给iframe绑定类似的事件,当iframe指向的是第三方的内容时,还要考虑跨域的问题,因此通过操作iframe的document是行不通的,还好有document.activeElement可供我们使用,最终的解决方案如下:

  1. var IframeOnClick = {
  2. resolution: 200,
  3. iframes: [],
  4. interval: null,
  5. Iframe: function() {
  6. this.element = arguments[0];
  7. this.cb = arguments[1];
  8. this.hasTracked = false;
  9. },
  10. track: function(element, cb) {
  11. this.iframes.push(new this.Iframe(element, cb));
  12. if (!this.interval) {
  13. var _this = this;
  14. this.interval = setInterval(function() { _this.checkClick(); }, this.resolution);
  15. }
  16. },
  17. checkClick: function() {
  18. if (document.activeElement) {
  19. var activeElement = document.activeElement;
  20. for (var i in this.iframes) {
  21. if (activeElement === this.iframes[i].element) { // user is in this Iframe
  22. if (this.iframes[i].hasTracked == false) {
  23. this.iframes[i].cb.apply(window, []);
  24. this.iframes[i].hasTracked = true;
  25. }
  26. } else {
  27. this.iframes[i].hasTracked = false;
  28. }
  29. }
  30. }
  31. }
  32. };

调用

    1. IframeOnClick.track(document.getElementById("iFrame"), function() { alert('a click'); });

为iframe添加onclick事件的更多相关文章

  1. JS如何为iframe添加onclick事件

    如果页面上有iframe时,鼠标点击在iframe内时,包含iframe的document是不响应任何事件的, 例如: $("#iframe1").click(function() ...

  2. jq动态添加onclick事件在谷歌中不起作用

    $("#oa-bed-rooType").append($('<option/>').val(0).text('请选择房间类型')); $('#oa-bed-roomT ...

  3. a 标签添加 onclick 事件

    a 标签添加 onclick 事件 <a href="javascript:void(0);" οnclick="js_method()">点击&l ...

  4. HTML中在a标签中添加onclick事件

    1.链接的onclick 事件被先执行,其次是href属性下的动作; 2.假设链接中同时存在href 与onclick,如果想让href 属性下的动作不执行,onclick 必须得到一个false的返 ...

  5. 利用事件的冒泡特性,为子标签添加Onclick事件

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. 为iframe添加鼠标事件

    1.关于iframe标签 使用iframe元素会创建包含另外一个文档的内联框架(即行内框架).所以我们可以使用iframe标签,在一个页面嵌入另一个页面.通过指定iframe的src为另一个页面的路径 ...

  7. js为元素添加onclick事件

    $("div.manu a:last").on('click',function(){ if (page == totalPage) { return; } page = page ...

  8. 动态加载下拉框列表并添加onclick事件

    1.  js动态加载元素并设置属性 摘自(http://www.liangshunet.com/ca/201408/336848696.htm) <div id="parent&quo ...

  9. 原生js遍历每一个对象,给每一个对象添加onclick事件

    <script type="text/javascript"> window.onload = function () { var imgs = document.im ...

随机推荐

  1. 接口测试工具-Jmeter使用笔记(九:跨线程组传递变量)

    使用场景: 请求API需要授权令牌,但是授权令牌只需要获取一次,即可调用服务器上其他业务接口. 所以我想要把授权操作放在单独的一个线程,业务流放在其他线程. 这就需要我把从授权线程获取的令牌传入业务流 ...

  2. 深入浅出--UNIX多进程编程之fork()函数

    0前言 上周都在看都在学习unix环境高级编程的第八章--进程控制.也就是这一章中.让我理解了unix中一些进程的原理.以下我就主要依照进程中最重要的三个函数来进行解说.让大家通过阅读这一篇文章彻底明 ...

  3. Docker:搭建私有镜像仓储(image registry)(4)

    搭建私有仓储,其实本质上也是运行了一个官方提供的(Registry)镜像的容器:生产环境中,我们要搭建自己的专有仓储 下载registry镜像 docker pull registry 运行镜像 do ...

  4. java之搭建webservice服务端

    1.新建工程. 2.配置项目名称和位置. 3.得到的项目结构如下: 4.配置tomcat服务器. (1) (2)新建一个tomcat服务. (3)配置tomcat参数. 5.配置WSDL文件. url ...

  5. Java代码质量改进之:同步对象的选择

    在Java中,让线程同步的一种方式是使用synchronized关键字,它可以被用来修饰一段代码块,如下: synchronized(被锁的同步对象) { // 代码块:业务代码 } 当synchro ...

  6. 字典 hash

    字典是按照hash存的,他会映射一个hash表,所以查找的时候根据一些算法会很快: 参考: https://harveyqing.gitbooks.io/python-read-and-write/c ...

  7. 用java生成32位全球唯一的id编号

    GUID是一个128位长的数字,一般用16进制表示.算法的核心思想是结合机器的网卡.当地时间.一个随即数来生成GUID.从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义 ...

  8. spring 的web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java ...

  9. myeclipse项目在Tomcat服务器部署问题

    错误信息:Deployment of project mybook will replace this resource. Please specify the action you wish to ...

  10. Shell 文本处理命令

    命令:cut –d’:’ -f1, 文件名 #切割处文件列的参数. -d切割字符. -f列的第几个参数. -c1-10指定字符串范围行的第一个到第十个. 命令:sort 文件名 #根据第一列第一个字符 ...