18.11.2017, 04:28
|
Интересующийся
|
|
Регистрация: 16.11.2017
Сообщений: 24
|
|
Я уже проверил и все работает. Нужно просто выбрать из select обработчик и в зависимости от его выбора менять name в input вот и все.
|
|
18.11.2017, 04:53
|
Интересующийся
|
|
Регистрация: 16.11.2017
Сообщений: 24
|
|
Ладно я сам разберусь дальше.
Тему можно закрывать.
|
|
18.11.2017, 05:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от ivan899
|
Ну во первых и та и другая форма отправляет запрос методом post.
|
А это тогда как понимать?
Сообщение от ivan899
|
У одой формы идет:
/component/search/?search=текст
|
Это не POST, это GET запрос.
Вы пишите, что начали понемногу .... Ну так подумайте и над тем, что поисковые запросы передаются не POST, а GET методами, чтобы поисковые роботы их кешировали. Почему это выгодно для сайта думаю пояснять не надо.
Ну и поступать так, как это вы делаете, в смысле метод смены адреса и т.п., это не самое лучшее.
Впрочем как душе угодно, нет, так нет.
|
|
18.11.2017, 10:59
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,800
|
|
Сообщение от ivan899
|
То что Nexus скинул код, он почему то не работает, там name не меняется, а вот action меняется
|
Я просто допустил ошибку.
Попробуйте так:
<html>
<head>
<meta charset="utf-8">
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(function() {
var frm = $('form').submit(function() {
if(!dst.val()) {
alert('Выберите где искать');
return false;
}
}),
dst = $('#inselect').change(function() {
frm.attr('action', this.value);
frm.find('input[type="text"]').attr('name',$(this).find('option:selected').data('name'));
})
});
</script>
</head>
<body>
<form action="" method="post" name="select">
<input name="search" type="text" placeholder="Поиск..." />
<select id="inselect">
<option value="" disabled="" selected>Где искать?</option>
<option value="/search" data-name="search">Блог</option>
<option value="/search-shop" data-name="searchword">Товары</option>
</select>
<input type="submit" value="Найти" />
</form>
</body>
</html>
|
|
18.11.2017, 14:38
|
Интересующийся
|
|
Регистрация: 16.11.2017
Сообщений: 24
|
|
Nexus,
Спасибо вот теперь действительно работает как надо.
Только надо в
var frm = $('form#ID').submit(function()
добавить id в form ну или class кому как угодно, что бы проверять какая именно форма не заполнена. А то не дает отправить другие.
А так действительно все работает. Спасибо.
|
|
18.11.2017, 14:54
|
Интересующийся
|
|
Регистрация: 16.11.2017
Сообщений: 24
|
|
laimas,
Не знаю но она работает.
По умолчанию в форме стоит post, но не get.
Не верите, скачайте joomla и посмотрите сами компонент com_search.
Вообще да там стандартной форме есть input строки которые передают в url такой вид /search/?search=текст
<input name="task" value="search" type="hidden">
<input name="option" value="com_search" type="hidden">
Но совместно с другой формой поиска не ищет правильно, по этому я убрал их. И оно так же работает как надо без них, просто в url уже не передает введенный текст
|
|
18.11.2017, 15:03
|
Интересующийся
|
|
Регистрация: 16.11.2017
Сообщений: 24
|
|
|
|
18.11.2017, 15:55
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от ivan899
|
Не знаю но она работает.
По умолчанию в форме стоит post, но не get.
Не верите, скачайте joomla и посмотрите сами компонент com_search.
|
Речь не о том, что работает или нет, а о методах передачи. У меня есть эта CMS, мне незачем ее скачивать как и смотреть ее код, из представленного:
/component/search/?search=текст
следует только одно - параметр search передается методом GET.
Форма переданная методом POST может одновременно передать и GET параметры, это параметры перечисленные в action формы, ибо action определяет GET запрос. Все поля перечисленные в форме при этом будут переданы методом POST, в теле запроса, поэтому в URL их и не видно. То есть, например, эта форма пусть имеет поля с именами a и b, сервер получит в массиве $_POST два ключа: a, b, и в массиве $_GET ключ search.
Если поле <input name="task" value="search" type="hidden"> в форме и посредством JS не подставляется в action формы при отправке, то это поле будет передано методом POST и в GET параметры никак не попадет, то есть этого /component/search/?search=текст не будет.
Чудес не бывает, само по себе такое не возможно. Загляните лучше в код CMS и посмотрите какие параметры скрипты принимают и обрабатывают.
|
|
18.11.2017, 17:59
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от ivan899
|
А это тогда что?
|
Я откуда знаю чего у вас там?
Забудьте на время о Джумле. Занимаясь разработкой веб приложений, обязательно имейте на компьютере своем локальный сервер. Для серверного языка как РНР самый лучший, простой и удобный это Open Server.
В нем и тренируйтесь, изучая примеры из руководства РНР. В нем выполните и отправку формы методом POST в котором будет поле с именем search. Если при отправке формы в URL вы увидите ?search, а в скрипте в массиве $_GET найдете такой ключ, тогда можете бросить в меня камень, ибо я был не прав. Иначе будет повод задуматься, что само по себе поле не может стать параметром GET запроса будучи отправленным методом POST.
Замените потом метод передачи формы на GET (этот метод является методом по умолчанию, так что можно просто удалить у формы method="post"). Отправьте форму. В этом случае где будут имена и значения ее полей?
И это не чудеса, так определено. Поместить поле search в URL запроса можно только JS сценарием (не само поле конечно, а под именем поля определить параметр GET запроса), удалив (или нет) при этом это поле из формы. И это тоже не чудеса, это возможность на клиенте посредством активных сценариев. Все иное, это могут быть только чудеса, но их не бывает.
Последний раз редактировалось laimas, 18.11.2017 в 18:06.
|
|
|
|