2013-12-11 2 views
9

Ich habe eine Seite mit HTML folgendenKann das Größenattribut eines Auswahlelements mithilfe von JavaScript in Internet Explorer 11 festgelegt werden?

<select id="person" size="5" onchange="document.getElementById('person').size = 1;"> 
    <option value="Homer">Homer</option> 
    <option value="Marge">Marge</option> 
    <option value="Bart">Bart</option> 
    <option value="Lisa">Lisa</option> 
    <option value="Maggie">Maggie</option> 
</select> 

Wenn Sie ein Element in der Liste auswählen, die Größe der Liste wird auf 1 gesetzt (so es macht als Kombinationsfeld eher als ein Listenfeld).

Bei Verwendung von Internet Explorer 11 stürzt der Browser ab. Beim Testen mit anderen Browsern gibt es kein Problem. Ich habe die folgenden Browser versucht:

  • Firefox 25.0.1
  • Chrome 31.0.1650.63 m
  • Internet Explorer 10

Es gibt eine jsfiddle hier ist http://jsfiddle.net/pC9zL/11/ die oben HTML enthält.

Hat jemand anderes dieses Problem erlebt und wenn ja, sind ihm mögliche Lösungen bekannt?

+1

Absturz bestätigt, IE 11. – bodi0

+1

Als erste Abhilfe, die ich würde versuchen, das select-Element zu klonen, legen Sie die Größe vor dem Klon wird an das DOM angehängt und ersetzt dann das ursprüngliche select-Element durch den Klon. – CBroe

+0

Sieht aus wie ein Fehler in IE11. Wenn Sie das 'size' Attribut auf' 1' setzen oder es sogar entfernen, stürzt IE11 ab. Ich habe versucht, einen Bericht über das Problem von Microsoft Connect zu erstellen und [Ihren Bericht] gefunden (https://connect.microsoft.com/IE/feedback/details/811300/setting-the-size-attribute-of-a- select-element-to-1-Ursachen-ie11-to-crash):). – Teemu

Antwort

3

Wie @CBroe vorschlägt, können Sie ein neues Element erstellen und das aktuelle ersetzen. Mit cloneNode eine „tiefe“ Kopie zu erstellen, können Sie, dass auf diese Weise tun:

<select id="person" size="5" onchange="toDropdown(this)"> 
    <option value="Homer">Homer</option> 
    <option value="Marge">Marge</option> 
    <option value="Bart">Bart</option> 
    <option value="Lisa">Lisa</option> 
    <option value="Maggie">Maggie</option> 
</select> 
<script> 
function toDropdown(select) { 
    var dropdown = select.cloneNode(true); 
    dropdown.selectedIndex = select.selectedIndex; 
    dropdown.size = 1; 
    select.parentNode.replaceChild(dropdown, select); 
} 
</script> 

Das IE stürzt nicht 11. Es scheint mit der Änderung eines um ein Problem zu habenselect in einer Art und Weise gemacht, dass erfordert eine vollständige Änderung des Renderprinzips (von Listbox zu Dropdown). Aber es kann eine solche Änderung verarbeiten, wenn Sie das gerenderte Element durch ein anderes ersetzen.

+0

Diese Lösung funktioniert und wir haben sie erfolgreich in unsere Anwendung integriert, danke. – gilles27

1

Ich habe das gleiche Problem und tritt mit onChange-Ereignis auf. Mit onClick Ereignis löste das Absturzproblem

<select id="person" size="5" onclick="document.getElementById('person').size = 1;"> 
 
    <option value="Homer">Homer</option> 
 
    <option value="Marge">Marge</option> 
 
    <option value="Bart">Bart</option> 
 
    <option value="Lisa">Lisa</option> 
 
    <option value="Maggie">Maggie</option> 
 
</select>

Weitere Informationen: http://social.msdn.microsoft.com/Forums/windows/en-US/4c5643f9-2d54-4a64-9f24-47a4b73fd618/select-box-size-change-crashes-ie11

Verwandte Themen