IE的option标签单击事件无法触发的解决方法

来源:互联网 发布:lamp linux版本 编辑:程序博客网 时间:2024/06/05 20:49

说明:

1、下面使用的代码仅适用于于IE浏览器,测试环境为IE8.

2、下面的代码来自于网络,我做了下闭包的整合

情景说明:

对于这样的一个select标签:

    <select id="s">      <option onkeydown="onkeyDown(this)" onkeypress="onkeyPress(o)" onkeyup="onkeyUp(o)"        value="文化">文化</option>      <option onkeydown="onkeyDown(this)" onkeypress="onkeyPress(o)" onkeyup="onkeyUp(o)"        value="科技">科技</option>    </select>

当我们选择了“文化”的时候,会触发select的onchange事件,但是如果我们再次选择“文化”,不会有任何的事情发生。

对于大多数的应用场景来说,这样就足够了,但是在某些特殊的情况下,我们想让每次的select控件的选择都产生事件,并且返回被选中的option的value,哪怕这次选中的option和上次选的option是一样的。

所以,综合网上现有的代码,我进行了一下包装,代码不限制使用,完全公开(ps:写的很烂):

    function addEventHandle(sID,oFunction) {      var o = document.getElementById(sID);      if (!o) return;      (function() {        o.onclick = function() {          var evt = window.event;          var selectObj = evt ? evt.srcElement : null;          // IE Only          if (evt && selectObj && evt.offsetY && evt.button != 2 && (evt.offsetY > selectObj.offsetHeight || evt.offsetY < 0)) {            // 记录原先的选中项            setTimeout(function() {              var option = selectObj.options[selectObj.selectedIndex];              oFunction(option)            }, 60);          }        }      }      )();    }

使用范例【用于IE8等IE的内核】

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>  <title>测试Option选择事件</title>  <script type="text/javascript" src="TableProcess.js"></script>  <script language="JavaScript" type="text/javascript">    //传入table标签的id    function show(o) {      textarea.value = o;    }    }    window.onload = function() {      addEventHandle("s",setReq);    }    function setReq(Obj) {      //show(Obj.text);      show(CurentTime());    }    function addEventHandle(sID,oFunction) {      var o = document.getElementById(sID);      if (!o) return;      (function() {        o.onclick = function() {          var evt = window.event;          var selectObj = evt ? evt.srcElement : null;          // IE Only          if (evt && selectObj && evt.offsetY && evt.button != 2 && (evt.offsetY > selectObj.offsetHeight || evt.offsetY < 0)) {            setTimeout(function() {              var option = selectObj.options[selectObj.selectedIndex];              oFunction(option)            }, 60);          }        }      }      )();    }  </script>  <style type="text/css">    .style1    {      width: 100%;    }  </style></head><body>  <p>    <select id="s">      <option value="文化">文化</option>       <option value="科技">科技</option>     </select>    <p id="shows">内容:<input type="text" id="textarea" /></p>   </p></body></html>



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为开机键坏了怎么办 抖音账号已重置怎么办 抖音账号被重置怎么办 吃鸡账号密码忘了怎么办 微信只记得账号忘了手机号怎么办 红米3开机键失灵怎么办 晚自习教室有许多虫子怎么办 泰迪吃草又呕吐怎么办 手机不断收到验证码信息怎么办 樱桃吃多了上火怎么办 过年不想回婆婆家过怎么办 旅行箱提手坏了怎么办 影棚人物后面有影子怎么办 微信运动图标不见了怎么办 逆光拍摄人黑了怎么办 单反镜头刮花了怎么办 股东各50股份不同意退股怎么办 退股没有协议他不愿意退钱怎么办 s7刷机有三星帐号id怎么办 做主播留不住人怎么办 直播间留不住人怎么办 淘宝直播间留不住人怎么办 干了一个月不发工资怎么办 16岁长白色头发怎么办 腾讯乘车码解约了怎么办 蓝洞棋牌客封号怎么办 草莓被蚂蚁吃了怎么办 脖子被种了草莓怎么办 2岁的宝宝说脏话怎么办 欠钱的人跑路了怎么办 美国非婚生子父亲不认怎么办 孕4个月肚子胀气怎么办 8个月孕妇感冒了怎么办 孕8个月感冒鼻塞怎么办 怀孕八个月感冒了怎么办 孕八个月咳嗽了怎么办 享物说同城自提怎么办 锤基意外怀孕怎么办 08 蛐蛐罐底翻砂了怎么办 剑网3中被盗号后怎么办 本人想离婚对方躲避怎么办