Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.06.2017, 07:30
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 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, а не по отдельности. Подскажите, как это реализовать. Чтобы учитывалось что выбрано.
Ответить с цитированием
  #2 (permalink)  
Старый 25.06.2017, 08:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Salvat
.on('click','input'
Это по логике уже неверно, если флажок изменяет свое состояние по щелку на нем, то щелчок в поле ввода, это просто получение им фокуса, а само поле при этом может быть и пустое. Обрабатывать нужно изменения состояния флажков и ввод в поле.

$('.who').on('change input', 'input', function() {
    //здесь можно проверить тип поля, чтобы проверить условие value.length >= 2
    //и включить его в поиск или нет
    //как и проверить наличие выбранных флажков
    //Ajax запрос при этом будет один
})
Ответить с цитированием
  #3 (permalink)  
Старый 25.06.2017, 09:01
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 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" } }
Ответить с цитированием
  #4 (permalink)  
Старый 25.06.2017, 09:18
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 25.06.2017, 09:26
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 22.02.2016
Сообщений: 98

laimas, спасибо большое, изучаю потихоньку, поэтому код неаккуратный и его много. Еще раз спасибо Оффтоп конечно, но я просто не могу Вам карму повысить к сожалению, необходимо другому человеку поставить +.
Ответить с цитированием
  #6 (permalink)  
Старый 25.06.2017, 09:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Salvat
я просто не могу Вам карму повысить
Стоит ли по этому подводу беспокоится, это же не баксы и с вас их никто не требует. )
Ответить с цитированием
  #7 (permalink)  
Старый 25.06.2017, 09:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Код .each должен завешаться точкой с запятой, как исправлено, иначе после сжатия может быть ошибка, если "сжимальщик" тупой. )
Ответить с цитированием
  #8 (permalink)  
Старый 30.06.2017, 07:51
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 22.02.2016
Сообщений: 98

laimas,
Здравствуйте.
У меня такой вопрос, я проверяю php результат и в итоге получаю NULL, обработать php почему-то не получается, я решил написать услвоие
if(data){
							$(".search_result").html(data).fadeIn();
                 	}else{
               	data = "Поиск не дал результата",
							$(".search_result").html(data).fadeIn();
                 	}

В итоге получаю пустой результат, вместо "Поиск не дал результата" укажите не ошибку.
Ответить с цитированием
  #9 (permalink)  
Старый 30.06.2017, 09:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Тот случай когда можно запутаться среди одного столба. О чем речь?

if(null) {
    alert('Есть данные')
} else {
    alert('Поиск не дал результата') //и не зачем действовать через переопределение 
}


Соответствует условию? А это "получаю пустой результат, вместо" где или в чем?
Ответить с цитированием
  #10 (permalink)  
Старый 30.06.2017, 10:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,254

Сообщение от Salvat
Мне же надо, что бы при клике чекбоксу или по text, отправлялся сборный POST, а не по отдельности. Подскажите, как это реализовать.
Вот почитай...
https://www.poseti.net/articles/otpravka-formyi
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Живой поиск, с помощью регулярных выражений Сложный человек Общие вопросы Javascript 9 17.11.2016 17:03
AJAX живой поиск и запись в массив с обработкой n.osennij AJAX и COMET 1 18.08.2015 18:03
Живой поиск JQUERY + AJAX + PHP + MYSQL dimi007 AJAX и COMET 2 22.07.2014 13:50
Живой поиск. Не работает при вставке текста мышкой formus Общие вопросы Javascript 4 13.06.2011 22:50
PagingToolbar и поиск DenQ ExtJS 5 02.11.2010 00:16