欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

select中无法使用click的处理 - 嗑瓜子儿gf

程序员文章站 2022-04-23 11:00:49
...

今天工作用到了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">qqoption>
12     option value="2">bbboption>
13     option value="3">cccoption>
14 select>
15 div>
16 div class="con" style="display:none">111div>
17 div class="con" style="display:none">222div>
18 div class="con" style="display:none">333div>
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.offsetY0 ) ) {  
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           
43         option value="1" onclick="showOptionValue( this )" >aaaaaoption>  
44         option value="2" onclick="showOptionValue( this )" >bbbbboption>  
45         option value="3" onclick="showOptionValue( this )" >cccccoption>  
46       select>  
47       
48     div id="reslut" >div>  
49     body>  
50     html>  

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