`
onTheJavaWay
  • 浏览: 18608 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

IE下option的onclick事件

阅读更多

最近在实现一个小功能时碰到了问题:想让用户通过点击一个下拉列表来打开一个新窗口。下面是简单的代码示例:

<select>
  <option on
click="test('www.hao123.com')"  value="www.hao123.com">hao123</option>
  <option on click="test('www.baidu.com')"  value="www.baidu.com">baidu</option>
  <option on click="test('www.google.com')"  value="www.google.com">google</option>
</select>

<script type="text/javas cript">
function test(s)
{
   window.open(s);
}
</script> 
 

但是运行是:Firefox下能正常运行,IE6、IE7下不能运行,且没有报错。

最后发现了问题所在:在IE里,select的 option 是不支持on click 事件 的,而在Firefox和 OPERA 里, option 是支持on click 事件 的。
那么应该怎么实现原设定的功能?用Select元素的onchange事件。这时主要是考虑如何获得被选中的选项所代表的链接。
修改后代码如下:
<select id="friendLink" on change="test()>
  <option  value="www.hao123.com">hao123</option>
  <option  value="www.baidu.com">baidu</option>
  <option  value="www.google.com">google</option>
</select>

<script type="text/javas cript">
function test()
{
  var targetSlect=document.getElementById("friendLink");
  var targetHref=targetSlect.options[targetSlect.selectedIndex].value;
  window.open(targetHref);
}
</script>
 
以上的思想来自于:
Remove the events from the options , use an event directly on the select instead.

Internet Explorer treats select boxes slightly different than the rest of the document, (if you've ever read anyhting about "windowed controlls" you know what I'm talking about)

I'm thinking IE doesn't notice events in childnodes of select elements, on ly the select elements themselves.

I normally setup my functions to work depending on either of the selects value or selectedIndex attribute & using the onchange event.


PS:
虽然onchange在某些时刻可以代替 option 的click事件 , 但是两者并无法做到完全等价. 因为onchange只有在 你点击的option 和之前的option 不同时才会触发. 当select当前选中的是第一项 而你再次点击第一项时, select是不会被触发的. 下面的代码演示了一种间接实现 option onclick的方法 注意:此方案只适用于下拉方式的单选select.
<script type="text/javascript" >   
 
function simOptionClick4IE(){    
    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 ) ) {    
                
            // 记录原先的选中项    
            var oldIdx = selectObj.selectedIndex;    
   
            setTimeout(function(){    
                var option=selectObj.options[selectObj.selectedIndex];    
                // 此时可以通过判断 oldIdx 是否等于 selectObj.selectedIndex    
                // 来判断用户是不是点击了同一个选项,进而做不同的处理.    
                showOptionValue(option)    
   
            }, 60);    
    }    
}    
   
function showOptionValue(opt,msg){    
    var now=new Date();    
    var dt= (1900+now.getYear())+'-'+(now.getMonth()+1)+'-'+now.getDate()+    
            ' '+now.getHours()+':'+now.getHours()+':'+now.getSeconds()+'.'+now.getMilliseconds();    
    var resultZone=document.getElementById('reslut');    
    resultZone.style.margin="10px";    
    resultZone.innerHTML=dt +" 时,点击了: " + (opt.text + ' = '+opt.value);  
 //这里可以进行很多处理,比如我要点击一个OPTION就打开一个网页,则可以这样写 
    location=opt.value; 
}    
   
</script>   
 </head>   
   
 <body>   
   
  <select  onclick="simOptionClick4IE()" >     
    <!-- 下面的 onclick="showOptionValue( this )" 是为 ff 和 opera而准备 -->   
    <option value=http://www.5566.org onclick="showOptionValue( this )" >aaaaa</option>   
    <option value=http://www.sina.com.cn onclick="showOptionValue( this )" >bbbbb</option>   
    <option value="http://www.csdn.net" onclick="showOptionValue( this )" >ccccc</option>   
  </select>   
<!--
   如果想让select 支持双击事件,则修改为:
   <select name="items"  multiple ondblclick="alert(this.value);">
       <option value="yourvalue">1</option>
       <option value="yourvalue">2</option>
   </select>
-->
<div id="reslut" ></div>   


以上补充说明来自http://www.cnblogs.com/interdrp/archive/2009/08/03/1537930.html
分享到:
评论

相关推荐

    javascript option onclick事件ie解决方案 兼容ie,firefox

    相比之下,Firefox 浏览器可以正确地触发 Option onclick 事件。 解决方案 要解决这个问题,我们可以使用 JavaScript 事件模型来捕捉 Option 元素的点击事件。在 IE 浏览器中,我们可以使用 `window.event` 对象来...

    ie8模式下click无反应点击option无反应的解决方法

    在IE8及其更早版本中,`&lt;option&gt;`标签不支持`onclick`或`click`事件,这是IE的一个已知兼容性问题。因此,使用jQuery的`click`事件绑定在`&lt;option&gt;`上,在IE8下是无效的。为了解决这个问题,开发者将事件绑定从`...

    基于jQuery的select下拉框选择触发事件实例分析

    本文实例讲述了基于jQuery的select下拉框选择触发事件实现方法。分享给大家供大家参考,具体如下: 我一直以来都认为,select 下拉框选择对选项 options 使用 onclick 注册事件即可...于是走上面的路线,客户还说了,IE

    javascript各浏览器中option元素的表现差异

    - Internet Explorer (IE) 6、7、8 和 9 不支持直接在`&lt;option&gt;`元素上绑定事件监听器,例如`click`或`mouseover`。这意味着在这些版本的IE中,你不能直接通过`&lt;option&gt;`元素的事件处理器来执行某些操作。 - 相反...

    javascript实现动态增加删除表格行(兼容IE FF).docx

    - **参数**: `obj` —— 表示触发事件的对象,通常是按钮。 - **逻辑概述**: 1. 获取当前按钮所在的行 (`objSourceRow`) 和表 (`objTable`)。 2. 如果按钮的值为“增加”: - 增加行索引 `rowIndex`。 - 使用 `...

    javascript下拉框选项单击事件的例子分享

    鉴于此,文章建议我们不应当直接在`&lt;option&gt;`元素上绑定`click`事件,而是应该使用更通用的`change`事件来替代,因为`change`事件在所有主流浏览器上均有良好的支持。使用`onchange`事件的方法如下: ```javascript...

    IE event.srcElement和FF event.target 功能比较

    这篇文章主要对比了这两个属性在不同浏览器下的使用情况。 首先,让我们看一个示例代码片段: ```html 单击查看" class="button_001_Class" onclick="Get_srcElement(event)"&gt; (event.srcElement.options...

    js实现下拉列表选中某个值的方法(3种方法)

    每个`&lt;option&gt;`元素代表一个可选项,且可以设置相应的value属性表示选中该选项时,下拉列表提交表单或进行其他操作时对应的值。 方法一:通过索引选择 通过索引选择是指使用JavaScript直接通过下标来访问和操作`...

    javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)

    因此,在编写跨浏览器的JavaScript代码时,总是要进行充分的测试,确保在各种浏览器环境下的兼容性和稳定性。通过一些工具和库,比如jQuery或者其他JavaScript框架,能够简化浏览器兼容性问题的处理,使得开发者更...

    浏览文件夹的js代码

    这段代码示例适用于IE和Firefox浏览器,但在现代Web标准下存在几个问题: 1. **安全性**:直接读取本地文件可能违反现代浏览器的安全策略。例如,现代浏览器默认禁止跨源请求,因此这段代码可能无法正常运行。 2. **...

    JavaScript控制两个列表框listbox左右交换数据的方法

    为了演示这个功能,我们还提供了一个简单的HTML界面,其中包含两个列表框和按钮,通过按钮点击事件调用上述JavaScript函数: ```html &lt;option value="a"&gt;Afghanistan&lt;/option&gt; &lt;option value="b"&gt;...

    网页设计常用的Javascript特效代码

    &lt;a href="#" onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://链接');"&gt;设为首页 ``` **打开窗口即最大化**: 当用户打开网页时,窗口会自动最大化至屏幕可用宽度和高度。这个...

    2023年web前端研发工程师笔试题选择题带答案.doc

    2. `event.keyCode`:在JavaScript中,当键盘事件触发时,`event.keyCode`返回按下键的ASCII码。对于字母键A,其ASCII码是65,所以正确答案是a)65。 3. JavaScript数组方法:`sort()`、`concat()`和`reverse()`是...

    js使用小技巧

    对象绑定事件 document.all.xxx.detachEvent("onclick",a); 插件数目 navigator.plugins 取变量类型 typeof($js_libpath) == "undefined" 下拉框 下拉框.options[索引] 下拉框.options.length 查找对象 ...

    HTML5教程.pdf

    - `onmousedown`:鼠标按钮按下事件。 - `onmouseup`:鼠标按钮释放事件。 **11.6 媒介事件** 媒介事件用于处理音频和视频元素,例如: - `onplay`:播放开始事件。 - `onpause`:暂停播放事件。 - `onended`:...

Global site tag (gtag.js) - Google Analytics