Перейти к содержимому


Нужна помощь по синтаксису JS


  • Вы не можете ответить в тему
Сообщений в теме: 6

#1 jorgovich

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 36 сообщений
Репутация: 1
Начинающий

Отправлено 12 April 2013 - 03:30 PM

Здравствуйте, пишу блок для ShopCms с формой поиска товаров с главной страницы, суть идеи простая подменить строку запроса в адресной строке, аналог расширенного поиска, не уверен что получится. Но вариантов для себя проще не увидел, так как не очень хорошо разбираюсь в цмс.
Вот код это шаблона блока вывода за основу брал AdvancedSearchInCategory
<form name='AdvancedSearchInCategory' method="GET" action="index.php" id="AdvancedSearchInCategory">
    <table cellspacing="1" cellpadding="0" width="100%" class="gre">
    <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">{$smarty.const.STRING_CATEGORY}:</td>
	  <td class="padt" align="left" width="100%"><select name='categoryID' id='formtext1' onChange="copyData('formtext1', 'formtext2')">		 
		  <option value='0'>{$smarty.const.ADMIN_PROMPT_TO_SELECT}</option>
		  <option value='2' >Категория 1</option>
		  <option value='3' >Категория 2</option>
		  <option value='4' >Категория 3</option>
		 </select>
<input type=hidden name='search_with_change_category_ability' value='yes'>
<input type=hidden name='categorySelect' id="formtext2" value=''>
	    </td>
    </tr>
	 <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">{$smarty.const.STRING_NAME}:</td>
	  <td class="padt" align="left" width="100%"><input type="text" name="search_name" size="50" value="{$search_name}"></td>
    </tr>
    <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">{$smarty.const.STRING_PRODUCT_PRICE}:</td>
	  <td class="padt" align="left" width="100%">{$smarty.const.STRING_PRICE_FROM} <input name="search_price_from" type="text" size="10" value="{$search_price_from}" > {$smarty.const.STRING_PRICE_TO} <input name="search_price_to" type="text" size="10" value="{$search_price_to}" > {$priceUnit}</td>
    </tr>
	 <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">Характеристика 1:</td>
	  <td class="padt" align="left" width="100%">
		  <select name='param_1'>
		  <option value='0'>{$smarty.const.STRING_UNIMPORTANT}</option>
		  <option value='Значение 1' selected>Значение 1</option>
	    </select>
   </td>
</tr><tr>
<td></td>
<td><input type="submit" value="Поиск" class="search_button" /></td>
</tr>
</table>
</form>
Теперь собственно скрипт отвечающий за подстановку, он работает, но проблемка возникла что мне нужно значение поля categoryID подставить в значение поля categorySelect, я попытался но в синтаксесе заплутал..
Код JS
{literal}
<script type="text/javascript">
  function copyData(id, target_id){ document.getElementById(target_id).value = document.getElementById(id).value; };

$(function() {
 
	 $(".search_button").click(function() {

		  if (document.AdvancedSearchInCategory.categorySelect.value != 0)
		  window.location = 'index.php?categoryID=' + '&search_with_change_category_ability=yes' + '&categorySelect=' + 'document.categorySelect.value' + '&search_name=' + document.search_name.value + 'search_price_from=' + document.search_price_from.value + '&search_price_to=' + document.search_price_to.value + '&param_1=' +  document.param_1.value;
		 }
		 return false;
	 });
});
</script>
{/literal}

  • 0

#2 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 12 April 2013 - 03:56 PM

если я правильно понял, то на время вставки выключить litreal
index.php?categoryID={/litral}{if $categoryID}{$categoryID}{else}1{/if}{literal}&search_with_change_c
если же нет, то как нибудь в одну строчку обьяснить, что откуда и куда
  • 0
Изображение Изображение Изображение

#3 jorgovich

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 36 сообщений
Репутация: 1
Начинающий

Отправлено 12 April 2013 - 04:02 PM

Я пытаюсь скопировать значение этого поля
<td class="padt" align="left" width="100%"><select name='categoryID' id='formtext1' onChange="copyData('formtext1', 'formtext2')">			
				  <option value='0'>{$smarty.const.ADMIN_PROMPT_TO_SELECT}</option>
				  <option value='2' >Категория 1</option>
				  <option value='3' >Категория 2</option>
				  <option value='4' >Категория 3</option>
				 </select>
в это поле
<input type=hidden name='categorySelect' id="formtext2" value=''>
этой функцией в JS
function copyData(id, target_id){ document.getElementById(target_id).value = document.getElementById(id).value; };
Но вот с синтаксисом у меня всегда проблема, вот прошу помочь, ошибки мои могут быть самые элементарные от ковычек до скобок
Возможно посоветуйте как можно по другому подставить значение одного поля в значение другого, просто нужно чтоб значениие полей этих идентичные друг другу были
  • 0

#4 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 12 April 2013 - 04:39 PM

function copyData(id, target_id){
var  id_val = $(id).val();
$(target_id).val(id_val);
};
использовать так

copyData('#formtext1','#formtext2')

  • 0
Изображение Изображение Изображение

#5 jorgovich

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 36 сообщений
Репутация: 1
Начинающий

Отправлено 12 April 2013 - 05:02 PM

Неа не работает, может быть тут дело в том что по onChange не срабатывает, потому как функция задана в конце страницы и подставляет пустое значение, а как повесить две функции на событие onclick кнопки, сначала подставилось первое значение потом отправка
  • 0

#6 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 12 April 2013 - 05:05 PM

Неа не работает

проверить, подключена ли библиотека jquery
  • 0
Изображение Изображение Изображение

#7 jorgovich

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 36 сообщений
Репутация: 1
Начинающий

Отправлено 12 April 2013 - 05:42 PM

Да, 1.8.2

Странно заработало и без categorySelect, щас приведу полный пример кода блока, кому понадобится такая задачка как у меня можете использовать, у меня просто категории не меняются, а вот товара много поэтому для облегчения поиска по категориям пришлось писать форму такую, вручную указывая параметры если кто модифицирует решение на смарти буду благодарен.

{* шаблон формы расширенного поиска *}
<form name='AdvancedSearchInCategory' method="GET" action="index.php" id="AdvancedSearchInCategory">
    <table cellspacing="1" cellpadding="0" width="100%" class="gre">
    <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">{$smarty.const.STRING_CATEGORY}:</td>
	  <td class="padt" align="left" width="100%"><select name='categoryID' onChange="document.getElementByName('categorySelect').value=this.value">		 
		  <option value='0'>{$smarty.const.ADMIN_PROMPT_TO_SELECT}</option>
		  <option value='2' >Категория 1</option>
		  <option value='3' >Категория 2</option>
		  <option value='4' >Категория 3</option>
		 </select>
<input type="hidden" name='search_with_change_category_ability' value='yes'>
<input type="hidden" name='categorySelect' value=''>
	    </td>
    </tr>
	 <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">{$smarty.const.STRING_NAME}:</td>
	  <td class="padt" align="left" width="100%"><input type="text" name="search_name" size="50" value="{$search_name}"></td>
    </tr>
    <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">{$smarty.const.STRING_PRODUCT_PRICE}:</td>
	  <td class="padt" align="left" width="100%">{$smarty.const.STRING_PRICE_FROM} <input name="search_price_from" type="text" size="10" value="{$search_price_from}" > {$smarty.const.STRING_PRICE_TO} <input name="search_price_to" type="text" size="10" value="{$search_price_to}" > {$priceUnit}</td>
    </tr>
	 <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">Характеристика 1:</td>
	  <td class="padt" align="left" width="100%">
		  <select name='param_1'>
		  <option value='0' selected>{$smarty.const.STRING_UNIMPORTANT}</option>
		  <option value='1'>Значение 1</option>
<option value='2'>Значение 2</option>
<option value='3'>Значение 3</option>
	    </select>
   </td>
</tr><tr>
  <tr>
	  <td class="lt pad" align="right" style="white-space: nowrap">Характеристика 2:</td>
	  <td class="padt" align="left" width="100%">
		  <select name='param_2'>
		  <option value='0' selected>{$smarty.const.STRING_UNIMPORTANT}</option>
		  <option value='1'>Значение 1</option>
<option value='2'>Значение 2</option>
<option value='3'>Значение 3</option>
	    </select>
<input type="hidden" value="yes" name="advanced_search_in_category">
<input type="hidden" value='1' name='search_in_subcategory'>
<input type="hidden" name='advanced_search_in_category' value="on">
</td>
</tr>
<td><input type="submit" value="Поиск" class="search_button" /></td>
<td></td>
    </tr>

  </table>
 
</form>
   {literal}
<script type="text/javascript">

$(function() {
 
	 $(".search_button").click(function() {

		  if (document.AdvancedSearchInCategory.categorySelect.value != 0)
		  window.location = 'index.php?categoryID=' + '&search_with_change_category_ability=yes' + '&categorySelect=' + 'document.categorySelect.value' + '&search_name=' + document.search_name.value + 'search_price_from=' + document.search_price_from.value + '&search_price_to=' + document.search_price_to.value + '&param_1=' +  document.param_1.value + '&param_2=' +  document.param_2.value;
		 }
		 return false;
	 });
});
</script>
{/literal}
Сохранить в блок вставить в поля свои категории, и характеристики по аналогии добавить не достающие параметры, у меня просто организовано что первые четыре характеристики повторяются во всех разделах, другие уже можно использовать в расширенном фильтре.

Спасибо eugene_wb за помощь
  • 0