2011-09-26 20 views
26

W tej chwili używam to:Przekierowanie na wybranej opcji w polu wyboru

<select ONCHANGE="location = this.options[this.selectedIndex].value;"> 

przekierowanie mnie na miejscu wewnątrz wartości opcji. Ale nie działa zgodnie z oczekiwaniami. Oznacza to, że jeśli kliknę pierwszą opcję zaznaczenia, akcja Nie można już zmienić. Myślałem o javascript, ale myślę, że będziesz miał lepsze sugestie. Jak mogę to zrobić, jeśli kliknę każdą opcję, która przekieruje mnie na jej wartość?

+0

To jest JavaScript. (inline JavaScript) – Nathan

+0

Ah, ok, dziękuję za to: p – Lucas

Odpowiedz

80

Ponieważ pierwsza opcja jest już wybrana, zdarzenie zmiany nigdy nie jest uruchamiane. Dodaj pustą wartość jako pierwszą i sprawdź pustą w przypisaniu lokalizacji.

Oto przykład:

<select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"> 
    <option value="">Select...</option> 
    <option value="http://google.com">Google</option> 
    <option value="http://yahoo.com">Yahoo</option> 
</select> 

A oto skrzypce: http://jsfiddle.net/bL5sq/

+0

Zrobiłem, ale jeśli użytkownik wciśnie przycisk "Wstecz" w przeglądarce, może wybrać "pustą" wartość, a lokalizacja skryptu zostanie zerwana. – Lucas

+0

@Lucas Następnie dodaj atrybut "disabled" do wartości "Wybierz ...", więc po kliknięciu nic się nie stanie: '' – Nathan

+2

@ Wszystkie - Nie ma takiej potrzeby. Powyższy skrypt się nie psuje! –

17

bym zdecydowanie wskazują na odejście od inline JavaScript, aby coś jak poniżej:

function redirect(goto){ 
    var conf = confirm("Are you sure you want to go elswhere?"); 
    if (conf && goto != '') { 
     window.location = goto; 
    } 
} 

var selectEl = document.getElementById('redirectSelect'); 

selectEl.onchange = function(){ 
    var goto = this.value; 
    redirect(goto); 

}; 

JS Fiddle demo (404 linkrot victim) .
JS Fiddle demo via Wayback Machine.
Forked JS Fiddle for current users.

W znaczniku w JS Fiddle pierwsza opcja nie ma przypisanej wartości, więc kliknięcie jej nie powinno uruchamiać żadnej funkcji, a ponieważ jest to wartość domyślna, kliknięcie na select, a następnie wybranie tej pierwszej wartości domyślnej: option nie uruchomi się mimo to zdarzenia change.

Aktualizacja:
Najnowszym przykładem jest (2017-08-09) przekierowaniach wymagane wymieniając ze względu na błędy w zakresie mieszanych treści między JS Fiddle i obu dziedzin, a także obu dziedzin wymagających „sameorigin” dla ramce treści. - Albert

+2

Trzy lata za późno, ale jest to najlepsza odpowiedź IMO. – Eckstein

+0

Twoje łącze fiddle daje 404, dobra odpowiedź inaczej; Brak kodu HTML, chociaż wersja – Manube

+0

będzie inline w porównaniu do standardowego javascript, jeśli chodzi o inne indeksowanie google? – splinter123

Powiązane problemy