Подтвердить что ты не робот

Перенаправление по опции выбора в поле выбора

В данный момент я использую это:

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

он перенаправляет меня на местоположение внутри значения параметра. Но это работает не так, как ожидалось.. означает, что если я нажму на первый вариант выбора, то действие onChange не будет выполняться. Я думал о javascript, но, думаю, у вас появятся хорошие предложения. Итак, как я могу заставить его работать, если я нажму на каждый параметр, он перенаправит меня на это значение?

4b9b3361

Ответ 1

Поскольку первый параметр уже выбран, событие изменения никогда не запускается. Добавьте пустое значение в качестве первого и проверьте наличие пустого места в назначении местоположения.

Вот пример:

<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>

И вот скрипка: http://jsfiddle.net/bL5sq/

Ответ 2

Я бы настоятельно рекомендовал отказаться от встроенного JavaScript, чтобы что-то вроде следующего:

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).
JS Fiddle demo через Wayback Machine.
Forked JS Fiddle для текущих пользователей.

В надписи в JS Fiddle первый параметр не имеет назначенного значения, поэтому нажатие на него не должно вызывать функцию, чтобы что-либо сделать, и поскольку это значение по умолчанию, щелкнув select, а затем выбрав первый по умолчанию option не будет запускать событие change в любом случае.

Обновление:
Последние URL-адреса перенаправления (2017-08-09) требуют замены из-за ошибок в отношении смешанного контента между JS Fiddle и обоими доменами, а также для обоих доменов, требующих "sameorigin" для оснащенного контента. - Альберт