Przekierowanie na opcję select w polu select
W tej chwili używam tego:
<select ONCHANGE="location = this.options[this.selectedIndex].value;">
Przekierowuje mnie na lokalizację wewnątrz wartości opcji. Ale to nie działa zgodnie z oczekiwaniami .. oznacza to, że jeśli kliknę na pierwszej opcji Wybierz, a następnie onChange akcji nie działa. Myślałem o javascript, ale myślę, że będziecie mieli lepsze propozycje. Więc jak Mogę sprawić, że to działa, jeśli kliknę każdą opcję, przekieruje mnie do jej wartości?
6 answers
Ponieważ pierwsza opcja jest już wybrana, Zdarzenie change nigdy nie zostanie wywołane. 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="https://google.com">Google</option>
<option value="https://yahoo.com">Yahoo</option>
</select>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-07 11:42:37
Zdecydowanie sugerowałbym odejście od wbudowanego JavaScript, do czegoś takiego jak:
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) .
js Fiddle demo via Wayback Machine .
Forked js Fiddle for current users .
W znaczniku w js pierwsza opcja nie ma przypisanej wartości, więc kliknięcie jej nie powinno wyzwalać funkcji do niczego, a ponieważ jest to wartość domyślna kliknięcie select
, a następnie wybranie tej pierwszej domyślnej option
i tak nie uruchomi zdarzenia change
.
Aktualizacja:
W najnowszym przykładzie (2017-08-09) adresy URL przekierowujące wymagały zamiany z powodu błędów dotyczących mieszanej zawartości między JS Fiddle a obiema domenami, a także obu domen wymagających "sameorigin" dla treści w ramce. - Albert
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 02:28:17
Aby uczynić go globalnie funkcją ponownego użycia przy użyciu jquery
HTML
<select class="select_location">
<option value="http://localhost.com/app/page1.html">Page 1</option>
<option value="http://localhost.com/app/page2.html">Page 2</option>
<option value="http://localhost.com/app/page3.html">Page 3</option>
</select>
Javascript using jquery
$('.select_location').on('change', function(){
window.location = $(this).val();
});
Teraz będziesz mógł ponownie użyć tej funkcji, dodając .Klasa select_location do dowolnej klasy elementu Select
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-18 07:08:47
Dla kogoś, kto nie chce używać inline JS.
<select data-select-name>
<option value="">Select...</option>
<option value="http://google.com">Google</option>
<option value="http://yahoo.com">Yahoo</option>
</select>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded',function() {
document.querySelector('select[data-select-name]').onchange=changeEventHandler;
},false);
function changeEventHandler(event) {
window.location.href = this.options[this.selectedIndex].value;
}
</script>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-21 21:49:04
Można to zarchiwizować, dodając kod w zdarzeniu onchange kontrolki select.
Na Przykład:
<select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);">
<option value=""></option>
<option value="http://google.com">Google</option>
<option value="http://gmail.com">Gmail</option>
<option value="http://youtube.com">Youtube</option>
</select>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-01 12:42:34
{{-- dynamic select/dropdown --}}
<select class="form-control m-bot15" name="district_id"
onchange ="location = this.options[this.selectedIndex].value;"
>
<option value="">--Select--</option>
<option value="?">All</option>
@foreach($location as $district)
<option value="?district_id={{ $district->district_id }}" >
{{ $district->district }}
</option>
@endforeach
</select>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 20:34:22