Как передать POST-данные? Живой поиск

veleg
На сайте с 30.01.2011
Offline
142
1813

Есть код

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="js/search.js"></script>
<script type="text/javascript" src="http://scriptjava.net/source/scriptjava/scriptjava.js"></script>

<form method="POST" action="">

<input type="text" name="referal" placeholder="Живой поиск" value="" class="who" autocomplete="off"><input type="submit" name="subscribe" value="Отправить!">

<ul class="search_result" id='popup'></ul>

</form>

<?php echo $_POST["referal"]; ?>

<script>

jQuery(function($){
$(document).mouseup(function (e){ // событие клика по веб-документу
var div = $("#popup"); // тут указываем ID элемента
if (!div.is(e.target) // если клик был не по нашему блоку
&& div.has(e.target).length === 0) { // и не по его дочерним элементам
div.hide(); // скрываем его
}
});
}); </script>

JS

$(function(){

//Живой поиск
$('.who').bind("change keyup input click", function() {
if(this.value.length >= 2){
$.ajax({
type: 'post',
url: "search.php", //Путь к обработчику
data: {'referal':this.value},
response: 'text',
success: function(data){
$(".search_result").html(data).fadeIn(); //Выводим полученые данные в списке
}
})
}
})

$(".search_result").hover(function(){
$(".who").blur(); //Убираем фокус с input
})

//При выборе результата поиска, прячем список и заносим выбранный результат в input
$(".search_result").on("click", "li", function(){
s_user = $(this).text();
$(".search_result").fadeOut();
$(".who").val(s_user).attr('', ''); //деактивируем input, если нужно

})

})

PHP обработчик

define("DB_HOST","");
define("DB_NAME",""); //Имя базы
define("DB_USER",""); //Пользователь
define("DB_PASSWORD","m"); //Пароль
define("PREFIX",""); //Префикс если нужно

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$mysqli -> query("SET NAMES 'utf8'") or die ("Ошибка соединения с базой!");

if(!empty($_POST["referal"])){ //Принимаем данные

$referal = trim(strip_tags(stripcslashes(htmlspecialchars($_POST["referal"]))));

$db_referal = $mysqli -> query("SELECT * from ".PREFIX."city WHERE city LIKE '%$referal%'")
or die('Ошибка №'.__LINE__.'<br>Обратитесь к администратору сайта пожалуйста, сообщив номер ошибки.');

while ($row = $db_referal -> fetch_array()) {
echo "\n<li>".$row["city"]."</li>"; //$row["name"] - имя таблицы
}

}

При клике на нужный ответ в поле input отображается нужная фраза, но в атрибуте value его нет. Как передать этот параметр в обработчик?

Фигачу Телеграм-ботов ( https://teleg.run/veleg )
Центик
На сайте с 07.01.2016
Offline
20
#1
veleg:
но в атрибуте value его нет

потому что вы грузите его яваскриптом - он не меняет исходный код страницы.Но то что вы видите в поле можете спокойно передавать в базу

LinkBoss.net - Трастовые ссылки для увеличения трафика в 10 раз! (http://linkboss.net/)
veleg
На сайте с 30.01.2011
Offline
142
#2
Центик:
потому что вы грузите его яваскриптом - он не меняет исходный код страницы.Но то что вы видите в поле можете спокойно передавать в базу

А каким образом по нажатию кнопки ОТПРАВИТЬ передать выбранное значение?

Samail
На сайте с 10.05.2007
Offline
369
#3
veleg:
$(".who").val(s_user).attr('', ''); //деактивируем input, если нужно

Деактивируем:

$(".who").val(s_user).attr('disabled', 'disabled');

Или активируем

$(".who").val(s_user).attr('disabled', false);

Или ничего не делаем:

$(".who").val(s_user);
veleg
На сайте с 30.01.2011
Offline
142
#4

Спасибо. С отправкой разобрался. Даже в коде ничего менять не пришлось. ИЗначально $_POST не выводило.

С JS сколько пытался подружиться, так и не сложились отношения.

Подскажите, как реализовать поиск таким образом, чтоб если не нашел совпадений, то выводил "что совпадений не найдено" и при потери фокуса с input поле очищалось.

jpg 156915.jpg
veleg
На сайте с 30.01.2011
Offline
142
#5

Город не найден я сделал.

Как сделать, чтобы поле input очищалось при условии, что город не найден и что был клик вне этого input?

$i=0;

while ($row = $db_referal -> fetch_array()) { $i++;

echo "\n<li><span>".$row["city"]."</span></li>"; //$row["name"] - имя таблицы
}
if($i == 0){echo "\n<li>Нет такого города</li>";}
$(".search_result").on("click", "li span", function(){
s_user = $(this).text();
$(".search_result").fadeOut();
$(".who").val(s_user);

})
Samail
На сайте с 10.05.2007
Offline
369
#6


$(document).mouseup(function (e){
var popup_text = $("#popup").text();
var input = $(".who");
if (!input.is(e.target) && popup_text=='Нет такого города'){
$("#popup").html('');
$(".who").val('');
}
});
veleg
На сайте с 30.01.2011
Offline
142
#7
Samail:

$(document).mouseup(function (e){
var popup_text = $("#popup").text();
var input = $(".who");
if (!input.is(e.target) && popup_text=='Нет такого города'){
$("#popup").html('');
$(".who").val('');
}
});

Сделал подобным образом. Поле не очищается. Может ли это связано с тем, фраза передается вместе с тэгом li? Хотя я и так пробовал <li>...</li>

jQuery(function($){

$(document).mouseup(function (e){ // событие клика по веб-документу
var div = $("#popup"); // тут указываем ID элемента
if (!div.is(e.target) // если клик был не по нашему блоку
&& div.has(e.target).length === 0) { // и не по его дочерним элементам
div.hide(); // скрываем его
}

var popup_text = $("#popup").text();
var input = $(".who");

if (!input.is(e.target) && popup_text=='Нет такого города'){
$("#popup").html('');
$(".who").val('');
}

});

});
Samail
На сайте с 10.05.2007
Offline
369
#8

После

var popup_text = $("#popup").text();

Вставьте

alert(popup_text);

И поглядите какой там текст показывает.

veleg
На сайте с 30.01.2011
Offline
142
#9
Samail:
После
var popup_text = $("#popup").text();

Вставьте
alert(popup_text);

И поглядите какой там текст показывает.

Спасибо ☝

Последний вопрос и все)

Как сделать, чтобы если текст равен 'Нет такого города', не срабатывал клик по кнопке отправить и клавиша enter?

Samail
На сайте с 10.05.2007
Offline
369
#10

$("form").submit( function () {

if($("#popup").text()=='Нет такого города'){return false;}
} );

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий