JS 模拟 select
来源:互联网 发布:迅雷看看mac版下载 编辑:程序博客网 时间:2024/05/28 23:20
这次把以前写的一个JS模拟select的类重写了一次。
不过类似的JS在网上一搜索还是有很多的,并没有什么新意的地方。
只是在重写的过程中发现一些有趣的事,所以把源程序贴出来,也顺便说说我的发现。
下面是JS模拟select的类。用了我自己写的类库, 在Danica_Effect.js里面。
Danica7773类库
下面来说说我的发现。
我想有很多人都会碰到过这样的问题:
给元素添加mouseover/mouseout事件的时候,常常会在鼠标经过元素内部的子元素的时候就触发了mouseout事件。
今天我就碰到的这样的情况,刚开始百思不得其解,不知道为什么会这样。
后来想到,会不会是鼠标经过子元素的时候,被认为是离开了绑定了mouseout事件的父元素,所以才会发过这样的情况。
所以我写了下面测试代码:
结果显示,在鼠标进入父元素的时候只alert了1,由父元素进入子元素的时候,alert了2,但随后也alert了1,也就是说在父元素和子元素的交界的地方发生了mouseout事件。那随后的mouseover事件又怎么解释呢,是进入子元素的时候又再次被认为是进入了父元素,还是给父元素绑定事件的时候同时也给子元素绑定了呢(我想这种情况是不可能的,我在程序中也没有写过这样的过程),为了证实假设是否成立,我给函数bg在最后面添加了一句“alert(_obj.onmouseover);”之所以这样加,一个是想看看子元素是否也绑定了mouse事件,同时,我也想看看传进去的event是否在交界的地方发生了变化。
结果显示,1,在交界的地方event的target确实改变了,由父元素变成了子元素;2子元素的mouseover事件为null,也就是说子元素没有绑定事件。
于是我想,如果我将传event改过传父元素对象会怎么样呢(这样操作的元素对象就不会变了)?
运行上面的代码,alert的结果和上面的一样(最后一句注销掉)。但由于操作对象没有发生变化,一直是绑定了事件的父元素。
所以在去掉alert语句后,程序运行的效果达到了我的要求(进入父元素后背景为红色,离开后为无色)。虽然中间还是发生了mouseout和mouseover事件,但由于时间很短,所以根本看不出来。
至此,这个在写JS模拟select类的时候碰到的最大问题得以解决。
但还是要说一句的是,那个在父子元素边界处被认定为是离开了父元素的判定让人很无语。
- JS 模拟 select
- js 模拟select
- js模拟下拉选择<select>
- js模拟设置select下拉框高度
- JQuery SELECT单选模拟 - jQuery.select.js
- 模拟select
- 模拟 SELECT
- js模拟权限选择实现代码(select操作)
- 通过JS模拟select表单,达到美化效果[demo][转]
- js select
- js select
- 如何模拟select控件
- DIV模拟select
- select鼠标模拟点击
- Div 模拟 Select Demo
- jQuery 模拟select
- jquery模拟SELECT框
- div 模拟select
- 提权方法
- oracle distinct用法
- 用防火墙客户端限制使用 SKYPE:ISA2006系列之七
- C++回调函数(callback)与仿函数(functor)的异同
- javascript的加载和执行浅析
- JS 模拟 select
- jdksfhkjalsfdgasfdg
- 写给想当程序员的朋友
- 初下ー28-文法
- 无插件在Eclipse中配置Resin方法
- 陈广 C#学习笔记(数组2-3)
- PHP 面向对象学习笔记总结
- MyISAM和InnoDB的异同
- 自己写的分页Util类