Andmax
@Andmax

Как передать параметры из формы в URL?

Имеется вот такая форма:
<form role="form" action="catalog/vse-tovaryi/">
	<select name="ms|price">
	    <option value="">Любая</option>
	    <option value="500">500 рублей</option>
	</select>
        <select name="msoption|tags">
	    <option value="1">Тэг 1</option>
	    <option value="2">Тэг 2</option>
	</select>

	<button type="submit">Подобрать</button>
</form>


Выбираем цену 500 рублей,
при нажатии на кнопку мы переходим на страницу catalog/vse-tovaryi/?ms|price=500&msoption|tags=1

А если мы выбираем "Любая", переходим на catalog/vse-tovaryi/?ms|price=&msoption|tags=1

Вопрос: как вообще не печатать этот параметр "ms|price=" в URL, если выбрано значение с пустым value?
Чтобы при выборе цены "Любая" при переходе ссылка была такой: catalog/vse-tovaryi/?msoption|tags=1

Обрыл весь google, ответа не нашел.
Заранее благодарен!
  • Вопрос задан
  • 4822 просмотра
Решения вопроса 2
Вот ловите накатал примерчик:
HTML:
<form role="form" id="form" action="catalog/vse-tovaryi/" data-def="catalog/vse-tovaryi/">
  <select name="ms|price">
      <option value="">Любая</option>
      <option value="500">500 рублей</option>
  </select>
        <select name="msoption|tags">
      <option value="1">Тэг 1</option>
      <option value="2">Тэг 2</option>
  </select>

  <button type="submit">Подобрать</button>
</form>

JS:
window.onload = function () {
	var form = $('#form'), def = form.data('def'), data = {}, action;
  
  $(document).on('change', '#form select', function () {
  	var el = $(this), val = el.val(), name = el.attr('name');
    if (val) {
    	data[name] = val;
    } else {
      delete data[name];
    }
    action = def + "?";
    for(var i in data) {
      action += i + "=" + data[i] + '&';
    }
    action = action.substr(0, action.length - 1);
    form.attr('action', action);
  });
};

Смысл заключается в генерации нужного вам url и подстановки его в аттрибут action вашей формы в связи с чем после нажатия на кнопку отправить, вы перейдете туда куда нужно.
Ответ написан
@bkosun
Вариант с удалением элемента с формы, если выбрана пустая опция:

<script src="https://code.jquery.com/jquery-2.1.3.js"></script>
<script type="text/javascript">
<!--
    $(function(){
        $("#sendForm").click(function(){ // При клике по кнопке #sendForm
            if ($("#msprice").val() == '') // Если в элементе #msprice выбрана опция с пустым значением
                $("#msprice").remove() // Удаляем #msprice с формы
        });
      }); 
-->
</script>

<form role="form" action="catalog/vse-tovaryi/">
  <select name="ms|price" id="msprice">
      <option value="">Любая</option>
      <option value="500">500 рублей</option>
  </select>
        <select name="msoption|tags">
      <option value="1">Тэг 1</option>
      <option value="2">Тэг 2</option>
  </select>

  <button type="submit" id="sendForm">Подобрать</button>
</form>


А вообще, если отображаемая ссылка в браузере не имеет значения, правильно было бы просто игнорировать этот аргумент скриптом обработчиком, как уже написали выше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@entermix
Можно удалить этот select при клике по кнопке отправки формы JS скриптом
Ответ написан
Комментировать
gluck59
@gluck59
Виртуальный глюк
А не проще ли на стороне обработчика просто не учитывать "пустой" аргумент?
Подозреваю, что это уже сделано, а ваша реальная задача выходит за рамки вашего вопроса.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы