2013-02-25 11 views
5

mam pole tekstowe tak:CSS nie może być zastosowana do elementu formularza poprzez javascript, jeśli jest ustawiona doctype

<input id="patId1" type="text" name="patId1" value=""> 

gdy strona ładuje skrypt nazywa który ustawia szerokość pola tekstowego. Ten kod jest następujący:

document.getElementById("patId1").style.width = document.getElementById("patId2").offsetWidth; 

gdzie, patId2 jest listą rozwijaną (wybierz znacznik). Zasadniczo próbuję ustawić szerokość pola tekstowego tak samo jak szerokość listy rozwijanej.

Teraz, jeśli ustawiono DOCTYPE, powyższy skrypt nie działa. Ale jeśli nie zostanie ustawione, szerokość zostanie zastosowana.

Każda pomoc.

+0

Nie ma powodu, dla którego mógłbym stworzyć nowe strony internetowe bez typu dokumentu. – Rob

+0

Co konkretnie ustawisz w DOCTYPE? I dzieje się tak z kilkoma przeglądarkami internetowymi? A może tylko jeden? Ostatnie pytanie: na jakim systemie operacyjnym pracujesz? – Ace

Odpowiedz

4

Wartość offsetWidth będzie liczbą. Właściwość CSS width akceptuje długość długości. Długości (inne niż 0) muszą mieć jednostki. W trybie dziwactwa przeglądarki naruszają specyfikację CSS i przyjmują jednostki px.

document.getElementById("patId1").style.width = document.getElementById("patId2").offsetWidth + 'px' 
0

Jest prostszy sposób to zrobić, a ja ponownie przeznaczona kod z poniższego postu @cychan:

Link:

How to expand 'select' option width after the user wants to select an option

Oto ogólne podejście:

<div id="select-wrapper-01" style="width: 180px; overflow: hidden;"> 
    <select style="width: auto;" name="abc" id="10"> 
     <option value="-1">Any</option> 
     <option value="123">123</option> 
    </select> 
</div> 

enter image description here

Teraz możesz mówić: "Zaczekaj chwilę? Moja największa wybierz opcję Nie 180px jest szeroka „

W takim przypadku należy usunąć styl width i overflow atrybutów z div

Następnie za pomocą javascript, aby zapewnić odpowiednią szerokość do otaczającego div, coś jak:.

var actualWidth = document.getElementById("patId2").offsetWidth; 
document.getElementById("select-wrapper-01").style.width = actualWidth + 'px'; 

enter image description here

Oto kopia robocza na jsfiddle. Nic wyszukanego, ale działa.

http://jsfiddle.net/acegyver/eTEuk/

Można spróbować gry z wybranych option s, uczynić je dłużej lub krócej, i zobaczyć, jak select dostosuje się dynamicznie.

Podaj kredyt, w którym należy się kredyt: Jak już powiedziałem, poprawiłem kod z istniejącego wpisu @cychan. Implementacja, która działa na twoje pytanie, jest przeze mnie.

Powiązane problemy