Возврат зачения в select из адресной строки
Доброго времени суток!
Наткнулся на такую задачу есть вот такая форма <form rel="nofollow" name="filter" action="/filter" method="get" id="filter-form" onsubmit="filterSubmit(); return false;"> <ul> <li class="filter-opt city-opt"> <select name="city" id="city" onchange="setCity(this.value, this)"> <option value="" selected>Город</option> <option value="0">Все</option> <?php foreach (getCityList() as $c) { ?> <option value="<?php echo $c->id; ?>"> <?php echo $c->name; ?> </option> <?php if ($c->id == $params['city']) $temp_city = $c->name; ?> <?php } ?> </select> <input type="hidden" class="opt-id" id="f-city" value="<?php echo $params['city']; ?>"/> </li> <li class="filter-opt auto-opt"> <select name="auto" onchange="setAuto(this.value, this)"> <option value="" selected>Марка</option> <option value="0">Все</li> <?php foreach (getAutoList() as $c) { ?> <option value="<?php echo $c->id; ?>"> <?php echo $c->name; ?> </option> <?php if ($c->id == $params['auto']) $temp_auto = $c->name; ?> <?php } ?> </select> <input type="hidden" class="opt-id" id="f-auto" value="<?php echo $params['auto']; ?>"/> </li> <li class="filter-opt type-opt"> <select name="cat" onchange="setType(this.value, this)"> <option value="" selected>Что искать?</option> <option value="0">Все</option> <?php foreach (getTypeList() as $c) { ?> <option value="<?php echo $c->tid; ?>"> <?php echo $c->name; ?> </optioon> <?php if ($c->tid == $params['cat']) $temp = $c->name; ?> <?php } ?> </ul> <input type="hidden" class="opt-id" id="f-type" value="<?php echo $params['cat']; ?>"/> </li> <li class="filter-opt sub-opt<?php if ($params['cat'] < 1 ) echo ' hidden-field'; ?>"> <select name="sub_cat" onchange="setSub(this.value, this)"> <option value="" selected>Уточним?</option> <option value="0">Все</option> <?php if ($params['cat'] > 0) { ?> <?php if ($getSubcat = _getCategoryList($params['cat'])) { ?> <?php foreach ($getSubcat as $c) { ?> <option value="<?php echo $c->tid; ?>"> <?php echo $c->name; ?> </option> <?php if ($c->tid == $params['subcat']) $temp = $c->name; ?> <?php } ?> <?php } ?> <?php } ?> </select> <input type="hidden" class="opt-id" id="f-sub" value="<?php echo $params['subcat']; ?>" /> </li> </ul> <div class="bckg"><input type="submit" value="Подобрать" onclick="changeFilterAction('');" /></div> <div class="bckg"><input type="submit" value="Отобразить списком" onclick="changeFilterAction('filter');" /></div> </form> function setType(type) {if(type == 0) {$('#f-sub').val(0);$('.sub-opt').addClass('hidden-field');}$('.type-opt #f-type').val(type);getSubcategory(type);} function setAuto(type) {$('.auto-opt #f-auto').val(type);} function setCity(type) {$('.city-opt #f-city').val(type);} function setSub(type) {$('.filter-opt.sub-opt select').click(function(){$('.filter-opt.sub-opt select').css("left","-9999 !important");});$('.sub-opt #f-sub').val(type);} function getSubcategory(type) {if (type > 0) {$.ajax({url: 'ac?t=sub',data: {id: type},success: function(data) {if (data) {$('.sub-opt select').html(data);$('.sub-opt').removeClass('hidden-field');} else {$('.sub-opt').addClass('hidden-field');$('#f-sub').val(0);}}});}} function filterSubmit() {var path = $('#filter-form').attr('action');var get = '';if (get = getParamString()) path += '?' + get;window.location.href = path;} function changeFilterAction(action) { $('#filter-form').attr('action', '/' + action); } /** * для карты */ function getParamString() {var filters = new Array();var param = 0;if ((param = parseInt($('#f-city').val())) > 0) filters.push('f\[city\]=' + param);if ((param = parseInt($('#f-auto').val())) > 0) filters.push('f\[auto\]=' + param);if ((param = parseInt($('#f-type').val())) > 0) filters.push('f\[cat\]=' + param);if ((param = parseInt($('#f-sub').val())) > 0) filters.push('f\[subcat\]=' + param); return filters.length > 0 ? filters.join('&') : ''; } Выдается результат на карту или списком через адресную строку формат http://mysite/?f[city]=n&f[auto]=n&f[cat]=n&f[subcat]=n, но значения select не запоминаются после загрузки страницы с результатами Вопроса по сути 2 как сделать так чтоб после загрузки данных значения в форме были теми что выбраны, а не по умолчанию ? и другой более замороченный. есть карта есть форма как сделать так чтоб при выборе значения результат сразу отображался на карте? надеюсь что есть добрые люди))) в js не очень шарю увы(((:cray: |
Цитата:
И еще - нафига эта канитель со скрытыми инпутами? Селект сам по себе умеет отправляться ввиде GET-параметра. Надо переделать. |
раньше вместо select и option были ul li сам переделывал, от них и остались((( надо будет почитать про GET :thanks:
|
Вот пример как делать:
<? $city = isset($_GET['city']) ? $_GET['city'] : '' ?> <select name="city" id="city" onchange="setCity(this.value, this)"> <option value="" <?= ($city == '') ? ' selected' : '' ?>>Город</option> <option value="0" <?= ($city == '0') ? ' selected' : '' ?>>Все</option> <?php foreach (getCityList() as $c) { ?> <option value="<?php echo $c->id; ?>" <?= ($city == $c->id) ? ' selected' : '' ?>> <?php echo $c->name; ?> </option> <?php if ($c->id == $params['city']) $temp_city = $c->name; ?> <?php } ?> </select> И вроде вместо _GET у тебя в $params уже все лежит. Скрытые инпуты убрать. JS весь убрать, кроме ajax-запроса. Не вижу ничего плохого в пустых GET-параметрах. |
Спасибо за наводку))) :victory:
действительно в $params всё было :write: Заработала как часики))) А как насчет того чтоб карта автоматом обновлялась при выборе параметра, не подскажешь? |
Часовой пояс GMT +3, время: 06:44. |