select中沒法使用click的處理

今天工做用到了select,想要給option添加click點擊事件,但是卻沒有任何效果,百度了才發現,原來居然是不支持呀!

衆所周知(其實我才知道哎),在IE裏, select的option是不支持onclick事件的, 而在FF 和 OPERA 裏, option 是支持onclick事件的.
(safari彷佛也不支持,不過暫時我還不知道如何解決safari的問題.) javascript

我今天是用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的問題.)html

相關文章
相關標籤/搜索