Передать значения отмеченных checkbox в url в виде get параметра

166
26 ноября 2018, 21:10

Как передать значения отмеченных checkbox в url в виде get параметра? В итоге хочу получить примерно такой url: www.test.ru/?r=1&r=2. Уточню нужно без кнопки submit.

Answer 1

let objectWithCheckboxes={}, 
withParams=!!location.search, 
siteHref=location.href 
$('input').change(e=>{ 
	let el=e.target, 
  jq=$(el) 
  if(jq.is(':checked')) objectWithCheckboxes[el.id]=el.name 
  else delete objectWithCheckboxes[el.id] 
  let res=[] 
  for(let k in objectWithCheckboxes) res.push(objectWithCheckboxes[k]+'='+k) 
  res=res.length?(withParams?'&':'?')+res.join('&'):'' 
  //window.history.replaceState('','',siteHref+res) 
  //^ эта строчка заменяет URL в браузере без перезагрузки страницы 
  console.log(siteHref+res) 
  //^ а это для теста 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<input type="checkbox" id="cbx1" name="r[]"> 
<input type="checkbox" id="cbx2" name="r[]"> 
<input type="checkbox" id="cbx3" name="r[]">

В итоге в php массиве $_GET['r'] будут находиться id елементов, на которых поставили флажок.

Answer 2

Если у Вас нет кнопки "submit" то вы должны к чему то привязывать формирование и отправку запроса на сервер. Очевидней всего привязываться к событию клик по чекбоксу. Однако нужно понимать что каждый клик по каждому чекбоксу будет генерировать запрос на сервер с значениями выделенных чекбоксов. Нужна ли серверу такая нагрузка?

в примере строку console.log(target.toString()) нужно заменить на тот механизм который отправит данные на сервер. Например fetch(target)

const sendCkecked = () => { 
  const target = new URL('http://www.test.ru/'); 
  const boxes = document.getElementsByClassName('checkbox'); 
  for (let i = 0; i < boxes.length; i++) { 
    if (boxes[i].checked) target.searchParams.set('r' + i, boxes[i].value) 
  } 
  console.log(target.toString()); // для демонстрации результата 
  // fetch(target); // для отправки данных на сервер 
} 
 
const blockEvent = event => event.stopPropagation();
<fieldset onClick="sendCkecked()"> 
    <div> 
        <input type="checkbox" id="scales" class="checkbox" 
               value="1" /> 
        <label for="scales" onClick="blockEvent(event)">1</label> 
    </div> 
 
    <div> 
        <input type="checkbox" id="horns" class="checkbox" 
               value="2" /> 
        <label for="horns" onClick="blockEvent(event)">2</label> 
    </div> 
 
    <div> 
        <input type="checkbox" id="claws" class="checkbox" 
               value="3" /> 
        <label for="claws" onClick="blockEvent(event)">3</label> 
    </div> 
 
</fieldset>

READ ALSO
Как загрузить офлайн-конверсии в Яндекс.метрику через php?

Как загрузить офлайн-конверсии в Яндекс.метрику через php?

В документации написано, создаем приложение, берем файл и шлем его POST`ом в яндекс и все окПробуем отправить, получаем ошибку 401, "Неавторизованный...

277
Как правильно отфильтровать данные?

Как правильно отфильтровать данные?

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

175
1 запрос для 2х переменных

1 запрос для 2х переменных

Есть таблица, в которой хранятся Бренды и их id – «Brands» @например@ (drand_id - 1, brand - KIA) Есть вторая таблица с товарами, в которую должны попадать...

174
Обфускация php проекта

Обфускация php проекта

Всем приветУ меня есть проекты, которые я полностью отдаю заказчикам на некоммерческое пользование, т

138