select中无法使用click的处理

今天工作用到了select,想要给option添加click点击事件,可是却没有任何效果,百度了才发现,原来竟然是不支持呀!

众所周知(其实我才知道哎),在IE里, select的option是不支持onclick事件的, 而在FF 和 OPERA 里, option 是支持onclick事件的.
(safari似乎也不支持,不过暂时我还不知道如何解决safari的问题.)

我今天是用onchange来解决的,原谅也是才知道它可以用这个。select状态改变来调用函数。

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/jquery-1.11.3.js"></script>
 6     <title></title>
 7 </head>
 8 <body>
 9
10 <select name="" id="qq" onchange="outputSelect()">
11     <option value="1">qq</option>
12     <option value="2">bbb</option>
13     <option value="3">ccc</option>
14 </select>
15 <div>
16 <div class="con" style="display:none">111</div>
17 <div class="con" style="display:none">222</div>
18 <div class="con" style="display:none">333</div>
19 </div>
20 <script>
21     $(".con").eq(0).show();
22     function outputSelect(){
23         console.log("aa");
24         var num =$("#qq").find("option:selected").index();
25         console.log(num);
26         $(".con").hide();
27         $(".con").eq(num).show().siblings().hide();
28     }
29
30     console.log($("#qq").find("option:selected").val());
31     var aa=$("#qq option:selected").val();
32     console.log(aa);
33 </script>
34 </body>
35 </html>

虽然onchange在某些时刻可以代替 option的click事件, 但是两者并无法做到完全等价. 因为onchange只有在 你点击的option和之前的option不同时才会触发. 当select当前选中的是第一项  而你再次点击第一项时, select是不会被触发的.

下面的代码演示了一种间接实现 option onclick的方法 
注意:此方案只适用于 下拉方式的单选select.
 1     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 2     <html>
 3      <head>
 4       <title>select-option onclick </title>
 5     <script type="text/javascript" >
 6
 7     function simOptionClick4IE(){
 8         var evt=window.event  ;
 9         var selectObj=evt?evt.srcElement:null;
10         // IE Only
11         if (evt && selectObj &&  evt.offsetY && evt.button!=2
12             && (evt.offsetY > selectObj.offsetHeight || evt.offsetY<0 ) ) {
13
14                 // 记录原先的选中项
15                 var oldIdx = selectObj.selectedIndex;
16
17                 setTimeout(function(){
18                     var option=selectObj.options[selectObj.selectedIndex];
19                     // 此时可以通过判断 oldIdx 是否等于 selectObj.selectedIndex
20                     // 来判断用户是不是点击了同一个选项,进而做不同的处理.
21                     showOptionValue(option)
22
23                 }, 60);
24         }
25     }
26
27     function showOptionValue(opt,msg){
28         var now=new Date();
29         var dt= (1900+now.getYear())+‘-‘+(now.getMonth()+1)+‘-‘+now.getDate()+
30                 ‘ ‘+now.getHours()+‘:‘+now.getHours()+‘:‘+now.getSeconds()+‘.‘+now.getMilliseconds();
31         var resultZone=document.getElementById(‘reslut‘);
32         resultZone.style.margin="10px";
33         resultZone.innerHTML=dt +" 时,点击了: " + (opt.text + ‘ = ‘+opt.value);
34     }
35
36     </script>
37      </head>
38
39      <body>
40
41       <select  onclick="simOptionClick4IE()" >
42         <!-- 下面的 onclick="showOptionValue( this )" 是为 ff 和 opera而准备 -->
43         <option value="1" onclick="showOptionValue( this )" >aaaaa</option>
44         <option value="2" onclick="showOptionValue( this )" >bbbbb</option>
45         <option value="3" onclick="showOptionValue( this )" >ccccc</option>
46       </select>
47
48     <div id="reslut" ></div>
49     </body>
50     </html>  

才知道),在IE里,select的option是不支持onclick事件的, 而在 FF 和 OPERA 里, option 是支持onclick事件的. (似乎也不支持,不过暂时我还不知道如何解决safari的问题.)

时间: 2025-01-14 22:22:22

select中无法使用click的处理的相关文章

fileupload控件在ajax中无法使用

google得到的方法: 1.http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx There is a better way of doing it with Ajax Control Toolkit version 3.0.30930 which works with .NET 3.5 SP1 and Visual Studio 2008 SP1. 

JQuery操作select中的option

html页面代码如下: <!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> <meta http-equiv=&q

CentOS 中无法使用make,make install 命令 make: command not

CentOS 中无法使用make,make install 命令 make: command not found 1.安装make yum -y install gcc automake autoconf libtool make 2.安装gcc yum install gcc gcc-c++

SQLSever: 如何在select中的每一行产生不同的随机数?

select 的随机函数有点假, 也许是因为它是基于时间来的吧, 同一select中由于时间无法错开导致产生的随机数都是一样的, 如何做到让不同的行拥有不同的随机数呢? 下面以产生某个月的随机日期来示例吧. --创建最小为1 最大为31 的视图 if object_id('view_rand_int31') is not null begin drop view view_rand_int31 end go create view view_rand_int31 as select cast(c

select 中使用 case when 和 replace

在SELECT中,用CASE   例如:     select   a.Cname   as   Tcomname,b.Cname   as   TGoodname,D.nQuanty,c.cNote,   (case   when   c.iEvaluate='-1'  then   '差评'  when   c.iEvaluate='1'   then   '好评'   when   c.ievaluate='0'   then   '一般'   end)   as   ievaluate 

select中文字垂直居中解决办法

我们知道select标签在各个浏览器中的属性和各浏览器的支持各有些不同,从而造成select选择框在各浏览器的显示有不同,下面我们通过对主要 外形CSS属性的支持,打造全兼容select. 我对select的height.padding.line-height分别利用控制变量的方法写了个DEMO在各浏览器上测试三种情况:height.100.padding.0.height.no.padding.100.no.height.no.padding,结果如  链接图片各浏览器DEMO外观 我们可以得

解决在IE8中无法使用原生JSON的问题

转自:http://www.iitshare.com/ie8-not-use-native-json.html 起因 在项目中要将页面上的js对象传给后台,想到可以用json转成字符串传递. 1 2 var obj = {"a":1 "b":2, "c":3}; var str = JSON.stringify(obj); 上述代码在firefox,chrome中测试都没问题,可是在ie8下确提示JSON Not Defined,google了一

mysql 去除重复 Select中DISTINCT关键字的用法

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值.其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而 这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的.所以我花了很多时间来研究这个问题,网上也查不到解决方案,期间把容容拉来帮忙,

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何在SQL Server存储过程中获取另一存储过程的执行结果记录集?如何在存储过程中检索动态SQL语句的执行结果?如何实现类似SELECT * FROM (EXEC procedure_name @parameters_var) AS datasource ... 的功能?procedure_