热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

鼠标点在iframe页面内无法关闭父页面的select下拉框

为什么在子页面点击无法关闭父页面下拉框?答:1.通常在没有iframe时,当我们做一个下拉框的功能,当鼠标在页面上的其它位

为什么在子页面点击无法关闭父页面下拉框?

答:
1. 通常在没有iframe时,当我们做一个下拉框的功能,当鼠标在页面上的其它位置点击一下时,这个下拉框就隐藏掉了,这个功能很容易做,给document绑定onmousedown或onclick即可。
2. 如果页面上有iframe时,鼠标点击在iframe内时,包含iframe的document是不响应任何事件的,所以需要给iframe绑定类似的事件,当iframe指向的是第三方的内容时,还在考虑跨域的问题,因此通过操作iframe的document是行不通的,还好有document.activeElement可供我们使用,解决方案如下:

var IframeOnClick = {resolution: 200,iframes: [],interval: null,Iframe: function() {this.element = arguments[0];this.cb = arguments[1]; this.hasTracked = false;},track: function(element, cb) {this.iframes.push(new this.Iframe(element, cb));if (!this.interval) {var _this = this;this.interval = setInterval(function() { _this.checkClick(); }, this.resolution);}},checkClick: function() {if (document.activeElement) {var activeElement = document.activeElement;for (var i in this.iframes) {if (activeElement === this.iframes[i].element) { // user is in this Iframeif (this.iframes[i].hasTracked == false) { this.iframes[i].cb.apply(window, []); this.iframes[i].hasTracked = true;}} else {this.iframes[i].hasTracked = false;}}}}
};

再然后调用它就可以了:

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

其实主要通过焦点匹配来进行监听的,所以你在它的点击函数里改变一下焦点 $body.focus(); 这样在子页面随便哪个地方点击都可以执行alert()函数

其他小知识:

在网页中,如何获取嵌入网页中的iframe内的document 对象呢?

1、第一种访问方法

这种写法估计很多人都没有用过:

document.getElementById(‘iframe1’).Document

注意:这里的获取document对象使用的是大写的Document, 若写成小写的document对象则指当前网页的document对象。

测试方法:

document.getElementById(‘iframe1’).document.writeln(‘test is ok’); //结果:当前网页页面输出test is ok

document.getElementById(‘iframe1’).Document.writeln(‘test is ok’); //结果:嵌入网页(iframe1)页面输出test is ok

//iframe的document对象
document.getElementById('iframe1').Document

//当前网页的document对象
document.getElementById('iframe1').document

2、第二种访问方法

document.getElementById(‘iframe1’).contentWindow.document

iframe里面的元素触发父窗口元素事件的jquery代码
例如父窗口定义了一个事件。

top:

$(dom1).bind(‘topEvent’, function(){});

那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗?

$(dom1, parent.document).trigger(‘topEvent’);

看似正确,实则误导人。

因为父窗口的jquery对象与iframe里面的jquery对象实际为两个对象(function),iframe里面的jquery并不会触发另一个jquery对象定义的事件。除非你在iframe这样定义了:

iframe:

self.$ = parent.$;

所以解决的方法很简单:

parent.$(dom1,parent.doucment).trigger(‘topEvent’);

调用父jquery执行该事件就行了。

话说iframe应该不必再引进jquery文件的,与父窗口共用一个jquery就行了,这样很环保。


推荐阅读
  • vue使用
    关键词: ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 解决文件名过长下载失败问题的jQuery方案
    本文介绍了使用jQuery解决文件名过长导致下载失败的问题。原方案中存在文件名部分丢失的问题,通过动态生成隐藏域表单并提交的方式来解决。详细的解决方案和代码示例在文章中给出。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
author-avatar
用户0a8xoj91q0
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有