我在使用 <select>
菜单时遇到了一个奇怪的问题。当我点击它之后(或将其最小化)回到包含 <select>
的页面时,<select>
有时会折叠并变得无响应。我检查了所有代码,它是100%有效的,而且我也在其他网站上看到了这种情况。
我在最新版本的Safari(适用于OSX 10.6.8),Chrome和Firefox(在Windows Vista和OSX 10.6.8上测试过)中经历了 <select>
菜单折叠的问题。奇怪的是,我无法在运行在Windows 8上的Chrome中复现 <select>
折叠问题...... 最后一个细节: <select>
元素的长度似乎会影响菜单折叠的概率(也就是说,<select>
中有越多的 <option>
元素,折叠的可能性就越大)。有时选择并退出一次后,<select>
菜单就会折叠;有时需要尝试5次或6次。
我的问题是:是什么原因导致了这个 <select>
折叠问题,是否有已知的解决方法?请参见下面的示例代码,它很简单,但在我之前提到的浏览器/操作系统中,<select>
菜单已经折叠了。先感谢你!
<!doctype html>
<html>
<head>
<title>Select Test</title>
</head>
<body>
<select name ="Test">
<option value = "0">0</option>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
<option value = "4">4</option>
<option value = "5">5</option>
<option value = "6">6</option>
<option value = "7">7</option>
<option value = "8">8</option>
<option value = "9">9</option>
<option value = "10">10</option>
<option value = "11">11</option>
<option value = "12">12</option>
<option value = "13">13</option>
<option value = "14">14</option>
<option value = "15">15</option>
<option value = "16">16</option>
<option value = "17">17</option>
<option value = "18">18</option>
<option value = "19">19</option>
<option value = "20">20</option>
<option value = "21">21</option>
<option value = "22">22</option>
<option value = "23">23</option>
<option value = "24">24</option>
<option value = "25">25</option>
<option value = "26">26</option>
<option value = "27">27</option>
<option value = "28">28</option>
<option value = "29">29</option>
<option value = "30">30</option>
<option value = "31">31</option>
<option value = "32">32</option>
<option value = "33">33</option>
<option value = "34">34</option>
<option value = "35">35</option>
<option value = "36">36</option>
<option value = "37">37</option>
<option value = "38">38</option>
<option value = "39">39</option>
<option value = "40">40</option>
<option value = "41">41</option>
<option value = "42">42</option>
<option value = "43">43</option>
<option value = "44">44</option>
<option value = "45">45</option>
<option value = "46">46</option>
<option value = "47">47</option>
<option value = "48">48</option>
<option value = "49">49</option>
<option value = "50">50</option>
<option value = "51">51</option>
<option value = "52">52</option>
<option value = "53">53</option>
<option value = "54">54</option>
<option value = "55">55</option>
<option value = "56">56</option>
<option value = "57">57</option>
<option value = "58">58</option>
<option value = "59">59</option>
<option value = "60">60</option>
<option value = "61">61</option>
<option value = "62">62</option>
<option value = "63">63</option>
<option value = "64">64</option>
<option value = "65">65</option>
<option value = "66">66</option>
<option value = "67">67</option>
<option value = "68">68</option>
<option value = "69">69</option>
<option value = "70">70</option>
<option value = "71">71</option>
<option value = "72">72</option>
<option value = "73">73</option>
<option value = "74">74</option>
<option value = "75">75</option>
</select>
</body>
</html>
更新:
以下是Safari 5.1.9运行在OSX 10.6.8上的折叠/无响应的<select>
菜单的截图(这是不同于我之前使用的那台Mac)。在尝试3次后(选择选项,然后点击浏览器外部),它变得无响应。当单击时不会显示选项列表,并且在重新加载页面之前完全无响应。我将很快在这台Mac上下载Chrome。
更新2: 根据@webdad3的说法,IE9也存在此问题
更新3:
这里是我上面发布的源代码的链接,但在JSbin中。由@starbeamrainbowlabs提供。
http://jsbin.com/eXOMeRI/1/edit
更新4:
根据@Zarazthuztra的说法,OSX 10.8也存在此问题。
更新5:
我采纳了@cloudcoder2000的建议,并在问题本身中发布了此链接。我相信它表明,无论<option>
的数量是多少,<select>
都不应该折叠(像我们中的许多人一样)。
我也要感谢大家迄今为止的帮助。
更新6: 我担心这个问题开始停滞...如果有人对导致此问题的原因有任何理论(无论它似乎有多“离奇”),请告诉我,我会尽快进行测试。
更新7: 只需确认:我在几个不使用JavaScript的页面上都遇到了这个崩溃问题。此外,我发布的示例代码(不包含任何JavaScript)已经折叠了我和几个其他stackoverflow用户(跨不同的操作系统和浏览器)。
更新8:
@Capile能够在Mac OS X 10.9.1上运行Safari 7.0.1时复制折叠问题。
更新9:
使用 @Capile 的代码,我在运行于OSX 10.6.8的Safari 5.1.10中得以实现<select>
的“展开”。请查看他的答案获取完整详情。今天或明天我将在Chrome和Firefox中测试他的代码,这真是令人兴奋,我认为我们已经接近解决问题了。再次感谢大家提供的帮助,你们太棒了!
更新10:
我终于有机会在我的Snow Leopard(10.6.9)机器上在Chrome中测试@Capile的代码。这次我遇到了一些麻烦,很难使<select>
折叠,但经过几分钟的尝试,它终于做到了。将他的代码粘贴到控制台后,<select>
“展开”了(用不太文雅的话说)。这非常奇怪,因为如果这种“折叠”问题与系统级垃圾回收有关,那么人们会认为<select>
在不同浏览器中应该相对一致地“折叠”,但实际情况并非如此。我在多个操作系统上测试了各种浏览器,发现在某些浏览器(如Safari)中<select>
的“折叠”现象非常普遍……我承认自己不是专业程序员,所以可能说的不对,但无论如何,我只是想更新这个问题,让更聪明的人能够思考新信息。
更新11:
我刚刚在此问题上添加了奖励,希望能引起更多兴趣(希望有些帮助)。昨晚我在运行于OSX 10.6.9的最新版本Firefox中成功使<select>
折叠。不幸的是,我没有时间在Firefox中测试@Capile的代码,但我会尽量在今天进行测试。