Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.04.2018, 14:15
Интересующийся
Отправить личное сообщение для ar4ipers Посмотреть профиль Найти все сообщения от ar4ipers
 
Регистрация: 26.03.2018
Сообщений: 25

Разобрать значения фильтров из url и расставить их по соответствующим полям
Здравствуйте, из нужно из url разобрать значения фильтров и расставить их по соответствующим полям. С checkbox и radio разобрался. а вот с select-ом не могу чет понять. мжет подскажет кто?
<form>
    <p><input name="size" type="radio" value="S"> S</p>
    <p><input name="size" type="radio" value="M"> M</p>
    <p><input name="size" type="radio" value="L"> L</p>
    <p><input type="checkbox" name="color" value="1">1</p>
    <p><input type="checkbox" name="color" value="2">2</p>
    <p><input type="checkbox" name="color" value="3">3</p>
    <p><input type="checkbox" name="color" value="4">4</p>
    <p><select multiple="multiple" size=4 name="manufacturer">
        <option value="aaa">aaa</option>
        <option value="b&c">b&c</option>
        <option value="ddd">ddd</option>
        <option value="eee">eee</option>
    </select></p>
    <p><input type="checkbox" name="sale" value="1">Распродажа</p>  
</form>

const   checkboxes = document.querySelectorAll('[name="color"]'),
            radios = document.querySelectorAll('[name="size"]');


    let url = new URL('http://любой_домен/filter?size=M&color=2,3&manufacturer=aaa,eee'),
        searchParams = new URLSearchParams(url.search),
        size = searchParams.get('size'),
        colors = searchParams.get('color').split(','),
        manufacturers = searchParams.get('manufacturer').split(',');

    let len1 = checkboxes.length,
        len2 = colors.length,
        len3 = radios.length;
    for (var i = 0; i < len1, i < len3; i++) {
        if (radios[i].value == size) radios[i].checked = true;
        for (let j = 0; j < len2; j++) {
            if (checkboxes[i].value == colors[j]) checkboxes[i].checked = true;
        }
    }
Ответить с цитированием
  #2 (permalink)  
Старый 27.04.2018, 14:56
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<form>
    <p><input name="size" type="radio" value="S"> S</p>
    <p><input name="size" type="radio" value="M"> M</p>
    <p><input name="size" type="radio" value="L"> L</p>
    <p><input type="checkbox" name="color[]" value="1">1</p>
    <p><input type="checkbox" name="color[]" value="2">2</p>
    <p><input type="checkbox" name="color[]" value="3">3</p>
    <p><input type="checkbox" name="color[]" value="4">4</p>
    <p><select multiple="multiple" size=4 name="manufacturer">
        <option value="aaa">aaa</option>
        <option value="b&c">b&c</option>
        <option value="ddd">ddd</option>
        <option value="eee">eee</option>
    </select></p>
    <p><input type="checkbox" name="sale" value="1">Распродажа</p>  
</form>
<script>
const   checkboxes = document.querySelectorAll('[name="color[]"]'),
            radios = document.querySelectorAll('[name="size"]'),
            options = document.querySelectorAll('[name="manufacturer"] option');


    let url = new URL('http://любой_домен/filter?size=M&color=2,3&manufacturer=aaa,eee'),
        searchParams = new URLSearchParams(url.search),
        size = searchParams.get('size'),
        colors = searchParams.get('color').split(','),
        manufacturers = searchParams.get('manufacturer').split(',');

    let len1 = checkboxes.length,
        len2 = colors.length,
        len3 = radios.length,
        len4 = manufacturers.length,
        len5 = options.length;
    for (var i = 0; i < len1, i < len3; i++) {
        if (radios[i].value == size) radios[i].checked = true;
        for (let j = 0; j < len2; j++) {
            if (checkboxes[i].value == colors[j]) checkboxes[i].checked = true;
        };
    };
    for (var i = 0; i < len5; i++) {
        for (let j = 0; j < len4; j++) {
            if (options[i].value == manufacturers[j]) options[i].selected = true;
        }
     };
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 27.04.2018, 15:15
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Dilettante_Pro,

можно чуть проще чем цикл в цикле

<form>
	<p><input name="size" type="radio" value="S"> S</p>
	<p><input name="size" type="radio" value="M"> M</p>
	<p><input name="size" type="radio" value="L"> L</p>
	<p><input type="checkbox" name="color[]" value="1">1</p>
	<p><input type="checkbox" name="color[]" value="2">2</p>
	<p><input type="checkbox" name="color[]" value="3">3</p>
	<p><input type="checkbox" name="color[]" value="4">4</p>
	<p><select multiple="multiple" size=4 name="manufacturer">
		<option value="aaa">aaa</option>
		<option value="b&c">b&c</option>
		<option value="ddd">ddd</option>
		<option value="eee">eee</option>
	</select></p>
	<p><input type="checkbox" name="sale" value="1">Распродажа</p>  
</form>
<script>
	const   checkboxes = document.querySelectorAll('[name="color[]"]'),
	radios = document.querySelectorAll('[name="size"]'),
	options = document.querySelectorAll('[name="manufacturer"] option');


	let url = new URL('http://любой_домен/filter?size=M&color=2,3&manufacturer=aaa,eee'),
	searchParams = new URLSearchParams(url.search),
	size = searchParams.get('size'),
	colors = searchParams.get('color').split(','),
	manufacturers = searchParams.get('manufacturer').split(',');

	let len1 = checkboxes.length,
	len2 = colors.length,
	len3 = radios.length,
	len4 = manufacturers.length,
	len5 = options.length;
	for (var i = 0; i < len1, i < len3; i++) {
		if (radios[i].value == size) radios[i].checked = true;
		for (let j = 0; j < len2; j++) {
			if (checkboxes[i].value == colors[j]) checkboxes[i].checked = true;
		};
	};

	options.forEach(el=>{
		if(manufacturers.includes(el.value))  el.selected = true;
	});

</script>
Ответить с цитированием
  #4 (permalink)  
Старый 27.04.2018, 15:20
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

j0hnik,
Можно, конечно. Просто я написал в стиле ТС
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Водяной знак на fancybox bobrina Общие вопросы Javascript 1 03.06.2011 21:11