Показать сообщение отдельно
  #12 (permalink)  
Старый 14.10.2018, 21:47
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Dilettante_Pro, j0hnik, я взял за основу ваш не корректно работающий код.

var streetArr=[
['Адрес абонентского отдела/ЦПО','https://javascript.ru/forum/'],
['Время работы абонентского отдела/ЦПО','https://javascript.ru/book'],
['Настройка роутера','https://learn.javascript.ru/'],
['Настройка модема','https://learn.javascript.ru/quiz'],
].sort();

alert(streetArr.length); // В каком JS окружении будет 5, а не 4?


Сообщение от ellexpron
работает на всех браузерах
Как минимум у 32% пользователей не работает, поскольку использован <select multiple>, который предполагает множественный выбор (и событие click не происходит, поскольку всплывает системное диалоговое окно). Т. е. открывается диалог с множественным выбором вариантов и всё!

У вас получается список ссылок, так и используйте список ссылок!

<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<body>
	<input type="text" class="opis" />
	<div id="podst"></div>

	<script>

var streetArr = [
['Адрес абонентского отдела/ЦПО','https://javascript.ru/forum/'],
['Время работы абонентского отдела/ЦПО','https://javascript.ru/book'],
['Настройка роутера','https://learn.javascript.ru/'],
['Настройка модема','https://learn.javascript.ru/quiz'], // (!)
];

document.onkeyup = function(event) {
	var event = event || window.event;
	var target = event.srcElement || event.target;

	if(/(^|\s)opis(\s|$)/.test(target.className)) {
		var html = [];

		for(var i = 0; i < streetArr.length && target.value !== ""; i++) {
			if(
				streetArr[i] !== undefined && // (!)
				streetArr[i][0]
					.toLowerCase()
					.indexOf(target.value.toLowerCase()) != -1
			) {
				html.push(
					'<li><a href="', streetArr[i][1], '">',
						streetArr[i][0],
					'</a></li>'
				);
			}
		}

		document.getElementById("podst").innerHTML =
			html.length !== 0 ?
				'<ul>' + html.join("") + '</ul>' : '';
	}
};

		</script>
		<style>
			/* просто пример */
			#podst ul {
				padding: 0;
				margin-top: 0;
				border: 1px solid #eee;
				display: inline-block;
				list-style: none;
			}

			#podst li {
				margin: 0;
				padding: 0;
			}

			#podst a {
				display: block;
				padding: 1em;
				color: black;
				text-decoration: none;
			}

			#podst a:focus, #podst a:hover {
				background-color: #eee;
			}
		</style>
	</body>
</html>


Работает в браузерах Android Chrome и Internet Explorer 8+ включительно
Ответить с цитированием