2013-02-18 9 views
12

Podczas renderowania listy rozwijanej select jak poniżej, iPhone renderuje ją pustą. Jak mogę to naprawić?<select> z atrybutem rozmiaru: iPhone renderuje pusty

<select size="3"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="opel">Opel</option> 
    <option value="audi">Audi</option> 
</select> 

Powyższy przykład z http://www.w3schools.com/tags/att_select_size.asp. Ich próbka jest http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select_size

W Firefoksie (i wszystkich innych przeglądarek), to świadczy jak:

Firefox example rendered select dropdown

Jednak na iPhone, to wygenerowana puste. Jest to bardzo niekorzystne z punktu widzenia użyteczności, ponieważ odwiedzający nie wie, co znajduje się w pudełku (w naszej aplikacji jest to wybór adresu z kilku możliwości).

iPhone example rendering

Utworzyłem JSFiddle: http://jsfiddle.net/bqMEv/3/ Renderowanie iPhone jest w następujący sposób; pamiętać, że nic nie pojawia się, gdy obie:

  • rozmiar jest większy niż 1
  • i wysokość jest określona w CSS
  • i nie jest zaznaczona opcja

Rendering from JSFiddle

Zdejmowanie CSS height pokazuje, że iPhone ignoruje atrybut size.

Removing CSS height

+0

Zamiast 'size = "3"', spróbuj zastosować regułę CSS 'wybierz {width: 10px; } ' –

+1

Nie masz żadnej opcji takiej jak" ", czy jest to zrobione celowo? –

+0

Korzystając z powyższego kodu przykładowego, nie ma wstępnie wybranego typu samochodu. Aby to zrobić, należy dodać "- Wybierz typ samochodu" lub podobny kod HTML. W mojej aplikacji wybierasz swój adres domowy z listy adresów; Nie wiem, który wybrać. – GlennG

Odpowiedz

5

Wygląda na to, nie ma standardowy sposób to zrobić, na podstawie zawartości innych tematów na przepełnienie stosu:

Ale autor drugim temacie napisał wtyczka emulująca to zachowanie: https://github.com/redhotsly/safarimobile-multiline-select

+0

http://forums.macrumors.com/showthread.php?t=324849 – GlennG

+0

Wygląda na to, że system iOS nie obsługuje normalnych atrybutów HTML> 1 lub wielu. Trzeba odwołać się do JavaScript jako obejścia, jeśli projekt wymaga widżetów stylu "picker". – GlennG

2

Jeśli potrzebujesz, aby wyświetlić jedną z opcji, należy użyć następujących: HTML selected Attribute

enter image description here



swojej strony internetowej w Firefox:

enter image description here

+0

Problem polega na tym, że nic nie jest wybrane, dopóki użytkownik nie zaznaczy czegoś. W przypadku użycia wpisałeś swój kod pocztowy na poprzedniej stronie, szukamy adresów, a następnie wyświetlamy je na wielopoziomowej liście wyboru, abyś mógł wybrać swój adres. IPhone renderuje to jako duży pusty widget; wszystko inne pokazuje to z wieloma rzędami adresów. – GlennG

+0

@GlennG Włóż atrybut "selected", aby wstępnie zaznaczyć wybraną wartość, w odpowiedzi znajdziesz odniesienie, a to, co widzisz na zrzucie ekranu, to pierwszy raz, kiedy otworzyłem listę rozwijaną, nie wybierając niczego samemu (zwróć uwagę na zaznaczenie opcji z opcją atrybut 'selected') –

+0

Używając przykładowego kodu, który jest Twoim PRE-WYBRANYM samochodem? Jedynym sposobem na to będzie dodanie nowej opcji "- Wybierz samochód -", ale to zmieni kod HTML. – GlennG

0

Wygląda na to, że ludzie tutaj mogą nie rozumieć w pełni wydaje. Problem polega na tym, że przeglądarka iOS nie wyrenderuje etykiety dla niewybranego pierwszego pola, które zazwyczaj jest wskaźnikiem typu "Proszę wybrać ...". Jeśli nie jest zaznaczone, system iOS renderuje go jako pusty. Nie jest to pożądane, ponieważ użytkownik może dokonać wyboru, ale pole jest puste.

Nie można również ustawić go programowo, aby uzyskać "Proszę wybrać" do wyświetlenia, ponieważ jeśli pole jest wymagane, sprawdzanie poprawności formularza już nie działa, ponieważ przeglądarka uznaje pierwsze pole za wybrane, nawet jeśli jest zaznaczone jako niewybieralny.

"Błąd" polega na tym, że przeglądarka iOS nie wyświetli etykiety dla pierwszego pola, gdy zostanie ustawione jako nieaktywne.

2

mój prosty fix do tego, przy użyciu jQuery:

$(document).ready(function(){ 
if(navigator.userAgent.match(/(iPhone|iPod|iPad)/i)) { 
$('#my_select_box').prepend('<option value="" selected="selected" disabled="disabled">..Please select something</option>'); 
} 
}); 

działa tak:

  1. Poczekaj na dokument, aby załadować

  2. Jeśli użytkownik odwiedza witrynę za pomocą iPhone, Wykonaj skrypt iPoda lub iPada:

  3. Dodaj wybrane i disa bled opcja u góry listy wyboru, z tekstem ".. Proszę wybrać coś".

Czy nic we wszystkich pozostałych przeglądarek, działa świetnie: D

Powiązane problemy