Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Создание ссылок из выпадающего списка (https://javascript.ru/forum/jquery/73842-sozdanie-ssylok-iz-vypadayushhego-spiska.html)

Black_Star 20.05.2018 19:13

Создание ссылок из выпадающего списка
 
Добрый день уважаемый. Столкнулся с такой задачей => На мобильных устройствах для сайта необходимо реализовать сортировку товара, и что б оно выглядела как множество кнопочек. Поскольку как таковая сортировка уже есть через select (для десктоп версии) мною было принято решение сделать отдельное попап поле в которое по нажатию на кнопку одноразово будут формироваться ссылки с адресами из этого select .
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
	<style>
	.btn_sorted__mobile {
		border: 1px solid #000;
		padding: 5px;
	}
	.bl_sortField{
		width: 300px;
		min-height: 300px;
		border: 1px solid #f00;
	}
	.test{
		display: block;
		margin-bottom: 5px;
		color: #f00;
	}
</style>
</head>


<body>
	<button class="btn_sorted__mobile" type="button">Сортировать</button>

	<div class="bl_sorter">
		<select class="bl_sorter__select js-mainSorter" onchange="location = this.value;">
			<option value="http://test1">По популярности</option>
			<option value="http://test2">Название (А - Я)</option>
			<option value="http://test3">Название (Я - А)</option>
			<option value="http://test4">Сначала подешевле</option>
			<option value="http://test5">Сначала подороже</option>
		</select>
	</div>
	<div class="bl_sortField"></div>
	<script>
		window.onload = function () {

			var btnSorted = $(".btn_sorted__mobile"),
			blockSortField = $(".bl_sortField");

			btnSorted.one('click', function(){
				var numberOfSelect = $(".js-mainSorter option").length;
				var sorterSelectVal =  $(".js-mainSorter option").each(function(){$(this).val()});
				var sorterSelectText = $(".js-mainSorter option").each(function(){$(this).text()});


				for(var i = 0; i < numberOfSelect; i++){
					blockSortField.append('<a class="test" href=" ' + sorterSelectVal.eq(i) +' " >' + sorterSelectText.eq(i) + '</a>')
				}

				console.log("numberOfSelect =" + numberOfSelect);
				console.log( "sorterSelectVal =" + sorterSelectVal );
				console.log( "sorterSelectText =" + sorterSelectText );

			});
		}
	</script>
</body>
</html>

Попробовал реализовать, но что-то пошло не так. Не могу понять почему мне сыпятся объекты а не их значения? Подскажите как исправить ?

рони 20.05.2018 19:22

Black_Star,
строки 47 и 48 пустышки, код правильный но ни о чём.

рони 20.05.2018 19:30

Black_Star,
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <style>
    .btn_sorted__mobile {
        border: 1px solid #000;
        padding: 5px;
    }
    .bl_sortField{
        width: 300px;
        min-height: 300px;
        border: 1px solid #f00;
    }
    .test{
        display: block;
        margin-bottom: 5px;
        color: #f00;
    }
</style>
</head>


<body>
    <button class="btn_sorted__mobile" type="button">Сортировать</button>

    <div class="bl_sorter">
        <select class="bl_sorter__select js-mainSorter" onchange="location = this.value;">
            <option value="http://test1">По популярности</option>
            <option value="http://test2">Название (А - Я)</option>
            <option value="http://test3">Название (Я - А)</option>
            <option value="http://test4">Сначала подешевле</option>
            <option value="http://test5">Сначала подороже</option>
        </select>
    </div>
    <div class="bl_sortField"></div>
    <script>
        window.onload = function () {
            var btnSorted = $(".btn_sorted__mobile"),
            blockSortField = $(".bl_sortField");
            btnSorted.one('click', function(){
                $(".js-mainSorter option").each(function(){
                blockSortField.append('<a class="test" href=" ' + this.value +' " >' + this.text + '</a>') });
            });
        }
    </script>
</body>
</html>

Black_Star 20.05.2018 19:31

рони та что ж в нём правильного, если он не о чём ? :)
Я просто был уверен что мне .each надергает значений которыми я смогу потом воспользоваться, а вижу что это не так

Black_Star 20.05.2018 19:34

рони, спасибо:thanks:

рони 20.05.2018 19:43

Цитата:

Сообщение от Black_Star
each

each ничего не возращает!!!
видимо хотели что-то такое ... вариант ниже только для демострации!!!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <style>
    .btn_sorted__mobile {
        border: 1px solid #000;
        padding: 5px;
    }
    .bl_sortField{
        width: 300px;
        min-height: 300px;
        border: 1px solid #f00;
    }
    .test{
        display: block;
        margin-bottom: 5px;
        color: #f00;
    }
</style>
</head>


<body>
    <button class="btn_sorted__mobile" type="button">Сортировать</button>

    <div class="bl_sorter">
        <select class="bl_sorter__select js-mainSorter" onchange="location = this.value;">
            <option value="http://test1">По популярности</option>
            <option value="http://test2">Название (А - Я)</option>
            <option value="http://test3">Название (Я - А)</option>
            <option value="http://test4">Сначала подешевле</option>
            <option value="http://test5">Сначала подороже</option>
        </select>
    </div>
    <div class="bl_sortField"></div>
    <script>
        window.onload = function () {

            var btnSorted = $(".btn_sorted__mobile"),
            blockSortField = $(".bl_sortField");

            btnSorted.one('click', function(){
                var numberOfSelect = $(".js-mainSorter option").length;
                var sorterSelectVal =  $(".js-mainSorter option").map(function(){return $(this).val()});
                var sorterSelectText = $(".js-mainSorter option").map(function(){return $(this).text()});

                for(var i = 0; i < numberOfSelect; i++){
                    blockSortField.append('<a class="test" href=" ' + sorterSelectVal.eq(i)[0] +' " >' + sorterSelectText.eq(i)[0] + '</a>')
                }

            });
        }
    </script>
</body>
</html>

Black_Star 20.05.2018 20:40

Спасибо, за пояснение


Часовой пояс GMT +3, время: 08:42.