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?

Author: Lucas, 2011-09-26

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:

Https://jsfiddle.net/bL5sq/

<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>
 109
Author: margusholland,
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

 20
Author: David says reinstate Monica,
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

 8
Author: Somwang Souksavatd,
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>
 1
Author: Yuriy Kots,
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>
 0
Author: Codemaker,
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>
 0
Author: Saifur Rahman,
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