ice world

          There is nothing too difficult if you put your heart into it.
          posts - 104, comments - 103, trackbacks - 0, articles - 0

          關于在IE下對Select標簽設置innerHTML無效的問題

          Posted on 2011-04-16 02:01 IceWee 閱讀(401) 評論(0)  編輯  收藏 所屬分類: Javascript
          今天在做應用的時候有個級聯菜單的功能,因為一般做開發的時候都是使用FireFox居多(原因不用多說,相信所有的前端開發人員都曾經嘗到了惡心的IE不遵守W3C標準的痛苦),因此想當然的時候對一個Select標簽進行了如下操作: selectObj.innerHTML = '<option value="value">something</option>'

          寫完之后興沖沖在FireFox下測試了一下功能,沒問題,覺得OK!     第二天有個同事在測試的時候發現在IE下選什么都沒有用,出不來子菜單,告訴我之后,著實把我郁悶了一番。在IE6下看了一把,貌似也沒有報什么腳本錯誤,但就是innerHtML沒有設置成功,因為之前沒有遇到過這個問題,調了很久都沒有找到原因。后來有IE Develop Toolbar看了一下生成之后的HTML結構,發現IE根本沒有按照我規定的格式去渲染select標簽,趕緊在Google上搜了一把,發現這是IE 的一個BUG,微軟的BUG申明中注明了兩種解決方案: 1. 如果您必須使用 innerHTML ,一種替代方法是使用一個 div 對象封裝 SELECT 元素和然后設置 div 對象的 innerHTML 屬性。 例如:

          <html>
          <head>
          <title>My Example</title>
          <script type="text/javascript">
          <!--
              
          var origDivHTML;
              
          function init() {    
                  origDivHTML 
          = myDiv.innerHTML;
              }

              
              
          function setValues() {    
                  
          var oldinnerHTML = "your original innerHTML: " + yourDiv.innerHTML;    
                  alert(oldinnerHTML);    
                  yourDiv.innerHTML 
          = origDivHTML;    
                  
          var curinnerHTML = "your current innerHTML: " + yourDiv.innerHTML;    
                  alert(curinnerHTML);}

          //-->
          </script>
          </head>
          <body onload="init()">
          <div id="myDiv">
              
          <select name="firstSelect" size="1">
                  
          <option>11111</option>
                  
          <option>22222</option>
                  
          <option>33333</option>
              
          </select>
          </div>
          <div id="yourDiv">
              
          <select name="secondSelect" size="1">
                  
          <option>aaaa</option>
                  
          <option>bbbb</option>
                  
          <option>cccc</option>
              
          </select>
          </div>
          <button onclick="setValues();">click me to set the values</button>
          </body>
          </html>

           

          2. 理想情況下,應使用 選項(Option) 集合添加為 SELECT 元素的選項。 下面的代碼顯示用編程方式將選項添加到 SELECT 元素的三種方法。例如:

          <html>
          <head>
          <title>Example</title>
          <script type="text/javascript">
          <!--
              
          function fill_select1() {    
                  
          for ( var i = 0; i < 100; i++{        
                      select1.options[i] 
          = new Option(i, i);    
                  }

              }

              
              
          function fill_select2() {    
                  
          var sOpts = "<select>";    
                  
          for ( var i = 0; i < 100; i++{        
                      sOpts 
          += '<option value="' + i + '">+ i + '</option>';    
                  }
              
                  select2.outerHTML 
          = sOpts + "</option>";
              }

              
              
          function fill_select3() {    
                  
          for ( var i = 0; i < 100; i++{        
                      
          var oOption = document.createElement("OPTION");        
                      oOption.text 
          = "Option: " + i;        
                      oOption.value 
          = i;        
                      document.all.select3.add(oOption)    
                  }

              }

          //-->
          </script>
          </head>
          <body>
              
          <h2>SELECT Box Population</h2>
              
          <select id=select1 name=select1></select>
              
          <input type="button" value="Populate with options list" id="button1" name="button1" onclick="fill_select1();">
              
          <br /><br />
              
          <select id="select2" name="select2"></select>
              
          <INPUT type="button" value="Populate with outerHTML" id="button2" name="button2" onclick="fill_select2();">
              
          <br /><br />
              
          <select id="select3" name="select3"></select>
              
          <input type="button" value="Populate with using createElement" id="button3" name="button3" onclick="fill_select3();">
          </body>
          </html>



          雖然這個BUG在GOOGLE上已經有不少人發表了看法,我還是覺得應該自己去寫下來,總結加深印象,希望能給有需要的朋友提供幫助,少走一些彎路。

          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/grubbyfan/archive/2009/01/09/3743344.aspx

          主站蜘蛛池模板: 小金县| 霍邱县| 海淀区| 石柱| 长海县| 高阳县| 通河县| 麻城市| 当涂县| 连城县| 乌拉特前旗| 利津县| 盐城市| 西丰县| 仁寿县| 孟津县| 乌鲁木齐市| 陇川县| 潞城市| 息烽县| 河津市| 汉寿县| 临洮县| 洮南市| 大渡口区| 黄骅市| 孝昌县| 湛江市| 平泉县| 方山县| 岱山县| 焦作市| 封丘县| 丰城市| 徐州市| 萝北县| 巩留县| 四川省| 永新县| 且末县| 揭东县|