Select с ссылками

По спецификации HTML в <option> нельзя вставить ссылку, если все-таки её туда вставить, то работать она не будет. В таких случаях можно сделать перенаправление браузера по клику на JS или имитацию селекта другими элементами.

<select onchange="window.location.href = this.options[this.selectedIndex].value">
	<option value=""></option>
	<option value="https://example.com/?brand=1">Peronda</option>
	<option value="https://example.com/?brand=2">Porcelanite Dos</option>
	<option value="https://example.com/?brand=3">Piemme Valentino</option>
	<option value="https://example.com/?brand=4">Dune</option>
	<option value="https://example.com/?brand=5">Atlas Concorde</option>
	<option value="https://example.com/?brand=6">Colorker</option>
	<option value="https://example.com/?brand=7">Golden Tile</option>
	<option value="https://example.com/?brand=8">Grespania</option>
	<option value="https://example.com/?brand=9">Vallelunga</option>
	<option value="https://example.com/?brand=10">Fanal</option>
</select>
HTML

Пример:

<select class="select">
	<option value=""></option>
	<option value="https://example.com/?brand=1">Peronda</option>
	<option value="https://example.com/?brand=2">Porcelanite Dos</option>
	<option value="https://example.com/?brand=3">Piemme Valentino</option>
	<option value="https://example.com/?brand=4">Dune</option>
	<option value="https://example.com/?brand=5">Atlas Concorde</option>
	<option value="https://example.com/?brand=6">Colorker</option>
	<option value="https://example.com/?brand=7">Golden Tile</option>
	<option value="https://example.com/?brand=8">Grespania</option>
	<option value="https://example.com/?brand=9">Vallelunga</option>
	<option value="https://example.com/?brand=10">Fanal</option>
</select>

<script>
$(document).ready(function(){
	$('.select').change(function(){
		window.location.href = $(this).val();
	});
});
</script>
HTML

Пример:

C использованием атрибута data

<select class="select form-control">
	<option value=""></option>
	<option value="1" data-url="https://example.com/?brand=1">Peronda</option>
	<option value="2" data-url="https://example.com/?brand=2">Porcelanite Dos</option>
	<option value="3" data-url="https://example.com/?brand=3">Piemme Valentino</option>
	<option value="4" data-url="https://example.com/?brand=4">Dune</option>
	<option value="5" data-url="https://example.com/?brand=5">Atlas Concorde</option>
	<option value="6" data-url="https://example.com/?brand=6">Colorker</option>
	<option value="7" data-url="https://example.com/?brand=7">Golden Tile</option>
	<option value="8" data-url="https://example.com/?brand=8">Grespania</option>
	<option value="9" data-url="https://example.com/?brand=9">Vallelunga</option>
	<option value="10" data-url="https://example.com/?brand=10">Fanal</option>
</select>

<script>
$(document).ready(function(){
	$('.select').change(function(){
		window.location.href = $('option:selected',this).data('url');
	});
});
</script>

HTML

Пример:

В целях SEO-перелинковки, в коде страницы должны находится ссылки <a>, в таком случаи можно имитировать <select> другими элементами.

HTML-разметка:

<div class="selectlink"> 
	<div class="selectlink-control">Производитель</div>
	<ul>
		<li><a href="https://example.com/?brand=1">Peronda</a></li>
		<li><a href="https://example.com/?brand=2">Porcelanite Dos</a></li>
		<li><a href="https://example.com/?brand=3">Piemme Valentino</a></li>
		<li><a href="https://example.com/?brand=4">Dune</a></li>
		<li><a href="https://example.com/?brand=5">Atlas Concorde</a></li>
		<li><a href="https://example.com/?brand=6">Colorker</a></li>
		<li><a href="https://example.com/?brand=7">Golden Tile</a></li>
		<li><a href="https://example.com/?brand=8">Grespania</a></li>
		<li><a href="https://example.com/?brand=9">Vallelunga</a></li>
		<li><a href="https://example.com/?brand=10">Fanal</a></li>
	</ul>
</div>
HTML

CSS:

.selectlink {			
	position: relative;
	display: inline-block;
	width: 200px;
	text-align: left;
	margin: 10px;
}
.selectlink-control {
	position: relative;
	padding: 10px 15px;
	border: 1px solid #dcdfe6;
	border-radius: 4px;
	background: #fff;
	cursor: pointer;
}	
.selectlink-control:after {
	content: '';
	border: 5px solid transparent;
	border-top: 5px solid #999;
	position: absolute;
	top: 50%;
	right: 15px;
	margin-top: -3px;
}
.selectlink ul {
	display: none;
	box-sizing: border-box;
	margin: 0;
	padding: 0;
	width: 100%;
	height: auto;
	max-height: 200px;
	position: absolute;
	top: 100%;
	left: 0px; 
	border: 1px solid #dadada;
	border-top: none;
	background: #fff;
	z-index: 9999;
	overflow: auto;
	user-select: none;
}	
.selectlink li {
	display: block;
	margin: 0;
	padding: 0;
}
.selectlink li a {
	position: relative;
	display: block;
	margin: 0;
	padding: 4px 6px 4px 15px;
	font-weight: normal;
	font-size: 1em;
	line-height: 1.1;
	cursor: pointer;
	text-decoration: none;
	color: #333;
}			
.selectlink li a:hover {
	background: #03a2ff;
	color: #fff;
}

@media screen and (max-width: 700px) {
	.body_pointer {
		cursor: pointer;
	}
}
CSS
Т.к. на мобильных устройствах событие «click» срабатывает только у элементов со свойством cursor: pointer, в коде реализована возможность закрыть выпадающее меню по клику вне области селекта (добавлением класса «body_pointer» к <body>).

JQuery:

$(function() {
	$(".selectlink-control").click(function(){
		var $menu_popup = $(this).next();
		$menu_popup.slideToggle(200, function(){
			$('.selectlink ul').not($menu_popup).slideUp(200);
			if ($menu_popup.is(':hidden')) {
				$('body').removeClass('body_pointer');
			} else {
				$('body').addClass('body_pointer');
			}					
		});  
		return false;
	});			

	$(document).on('click', function(e){
		if (!$(e.target).closest('.selectlink').length){
			$('body').removeClass('body_pointer');
			$('.selectlink ul').slideUp(200);
		}
	});
});
JS

Пример:

04.06.2020
11816
Предыдущая запись Текст в три колонки
Следующая запись Склонение числительных в JS

Комментарии 2

Борис Михайлов Борис Михайлов
11 января 2021 в 12:59
0
скопировал 3 метод с имитацией, а список не раскрывается. Из-за чего это может быть?
Snipp.ru Snipp.ru
11 января 2021 в 13:12
0
Скорее всего не подключен JQuery

, чтобы добавить комментарий.

Другие публикации

Главное меню для мобильной версии сайта
Не очень сложное раскрывающееся меню для мобильной версии сайта на JQuery.
27861
+10
Contenteditable – текстовый редактор
Если добавить атрибут contenteditable к элементу, его содержимое становится доступно для редактирования пользователю, а...
22063
+25
Фиксированное горизонтальное меню с активными пунктами
Пример горизонтального меню для лэндингов, в котором реализовано...
8563
+5
Модальное окно на затемненном фоне
Для модальных окон есть множество плагинов такие, как fancybox, Twitter Bootstrap и т.д. Но бывают случаи когда нет...
43850
+18
Печать HTML страниц
Очень часто разработчики забывают про печатную версию сайта, поэтому можно встретить такой результат на бумаге...
26894
+6
Работа с Textarea jQuery
Сборник jQuery приемов с textarea - получить содержимое, вставить значение, подсчет количества символов и строк и т.д.
38624
+4