
25.06.2017, 07:30
|
Аспирант
|
|
Регистрация: 22.02.2016
Сообщений: 98
|
|
Живой поиск и checkbox
Здравствуйте. Имеется такой код.
<div class="who">
<input type="text" name="referal" style="width:200px;margin-left:35%;" placeholder="" value="" autocomplete="off">
<input type='checkbox' name='jobs' value="j">Работа
<input type='checkbox' name='peoples' value="p">Люди
<input type='checkbox' name='callboard' value="c">Объявления
</div>
<div class="search_result"></div>
$('.who').on('click','input', function() {
var obj = $('.who input:checked');
if(obj.length > 0){
var d ={};
obj.each(function(i,e){
d[$(e).attr('name')] = $(e).val();
console.log($(e).attr('name')+" - "+ $(e).val());
$.ajax({
type: 'post',
url: "search_ajax.php",
data: d,
response: 'text',
success: function(data){
$(".search_result").html(data).fadeIn();
}
})
})
} else {
console.log('length = 0');
}
if(this.value.length >= 2){
$.ajax({
type: 'post',
url: "search_ajax.php",
data: {'referal':this.value},
response: 'text',
success: function(data){
$(".search_result").html(data).fadeIn();
}
})
}
})
Мне же надо, что бы при клике чекбоксу или по text, отправлялся сборный POST, а не по отдельности. Подскажите, как это реализовать. Чтобы учитывалось что выбрано.
|
|

25.06.2017, 08:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Salvat
|
.on('click','input'
|
Это по логике уже неверно, если флажок изменяет свое состояние по щелку на нем, то щелчок в поле ввода, это просто получение им фокуса, а само поле при этом может быть и пустое. Обрабатывать нужно изменения состояния флажков и ввод в поле.
$('.who').on('change input', 'input', function() {
//здесь можно проверить тип поля, чтобы проверить условие value.length >= 2
//и включить его в поиск или нет
//как и проверить наличие выбранных флажков
//Ajax запрос при этом будет один
})
|
|

25.06.2017, 09:01
|
Аспирант
|
|
Регистрация: 22.02.2016
Сообщений: 98
|
|
Благодарю за поправление
$('.who').on('change input', 'input', function() {
var obj = $('.who input:checked');
if(obj.length > 0 ){
if(this.value.length >=2){
var d ={};
obj.each(function(i,e){
d[$(e).attr('name')] = $(e).val();
console.log($(e).attr('name')+" - "+ $(e).val());
$.ajax({
type: 'post',
url: "search_ajax.php",
data: d,
response: 'text',
success: function(data){
$(".search_result").html(data).fadeIn();
}
})
})
}
} else {
if(this.value.length >=2){
$.ajax({
type: 'post',
url: "search_ajax.php",
data: {'referal':this.value},
response: 'text',
success: function(data){
$(".search_result").html(data).fadeIn();
}
})
}
}
})
Так, да, срабатывает, но подскажите, каким образом можно и referal отправить, если я прописываю
if(obj.length > 0 ){
if(this.value.length >=2){
var d ={};
obj.each(function(i,e){
d[$(e).attr('name')] = $(e).val();
console.log($(e).attr('name')+" - "+ $(e).val());
$.ajax({
type: 'post',
url: "search_ajax.php",
data: {'referal':this.value,'check':d},
response: 'text',
success: function(data){
$(".search_result").html(data).fadeIn();
}
})
})
}
}
array(2) { ["referal"]=> string(1) "j" ["check"]=> array(1) { ["jobs"]=> string(1) "j" } }
Получаю при выборе флажка, а должно быть
array(2) { ["referal"]=> string(1) "aaa" ["check"]=> array(1) { ["jobs"]=> string(1) "j" } }
|
|

25.06.2017, 09:18
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Зачем же столько кода, если судя по вопросу нужно отправить любой выбор, то есть любой набор флажков с текстом или без, и наоборот.
$(function() {
$('div.who').on('input', 'input', function() {
var d = {};
$(this).parent().find('input').each(function() {
if(this.type=="text" && this.value.length >=2 || this.checked) d[this.name] = this.value
});
if(Object.keys(d).length) {
$.ajax({
type: 'post',
url: "search_ajax.php",
data: d,
...
})
}
});
});
Можно оставить одно событие input, оно будет возникать и у флажков (я говорил о двух для понимания процесса)
Последний раз редактировалось laimas, 25.06.2017 в 09:34.
|
|

25.06.2017, 09:26
|
Аспирант
|
|
Регистрация: 22.02.2016
Сообщений: 98
|
|
laimas, спасибо большое, изучаю потихоньку, поэтому код неаккуратный и его много. Еще раз спасибо  Оффтоп конечно, но я просто не могу Вам карму повысить к сожалению, необходимо другому человеку поставить +.
|
|

25.06.2017, 09:29
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Salvat
|
я просто не могу Вам карму повысить
|
Стоит ли по этому подводу беспокоится, это же не баксы и с вас их никто не требует. )
|
|

25.06.2017, 09:34
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Код .each должен завешаться точкой с запятой, как исправлено, иначе после сжатия может быть ошибка, если "сжимальщик" тупой. )
|
|

30.06.2017, 07:51
|
Аспирант
|
|
Регистрация: 22.02.2016
Сообщений: 98
|
|
laimas,
Здравствуйте.
У меня такой вопрос, я проверяю php результат и в итоге получаю NULL, обработать php почему-то не получается, я решил написать услвоие
if(data){
$(".search_result").html(data).fadeIn();
}else{
data = "Поиск не дал результата",
$(".search_result").html(data).fadeIn();
}
В итоге получаю пустой результат, вместо "Поиск не дал результата" укажите не ошибку.
|
|

30.06.2017, 09:56
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Тот случай когда можно запутаться среди одного столба. О чем речь?
if(null) {
alert('Есть данные')
} else {
alert('Поиск не дал результата') //и не зачем действовать через переопределение
}
Соответствует условию? А это "получаю пустой результат, вместо" где или в чем?
|
|

30.06.2017, 10:15
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,254
|
|
Сообщение от Salvat
|
Мне же надо, что бы при клике чекбоксу или по text, отправлялся сборный POST, а не по отдельности. Подскажите, как это реализовать.
|
Вот почитай...
https://www.poseti.net/articles/otpravka-formyi
|
|
|
|