Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Результаты формы (https://javascript.ru/forum/misc/78225-rezultaty-formy.html)

_marisha 12.08.2019 09:10

Результаты формы
 
Доброго времени суток!
На сайте при добавлении товара в корзину справа отображается форма для ввода информации с 2 полями с выпадающим списком.
<div class="form-body">
    <div class="place_sections_block">
      <div class="row">
      	<div class="col-md-12">
      	   <div class="form-group animated-labels input-filed">
      		   <label for="POPUP_SERVICE">Раздел</label>
             <div class="input">
                <select name="" class="place_sections form-control">
                  <?foreach ($sections as $section){?>
                    <option value="<?=$section['ID']?>"><?=$section['NAME']?></option>
                  <?}?>
                </select>
            </div>
          </div>
        </div>
      </div>
    </div>
    <?$counter = 0;
    foreach ($sections as $section){?>
      <div class="row place_elements<?=++$counter==1?' active':''?>" id="placeElements<?=$section['ID']?>">
      	<div class="col-md-12">
      	   <div class="form-group animated-labels  input-filed">
      		   <label for="POPUP_SERVICE">Место</label>
             <div class="input">
              <select class="form-control">
                <?foreach ($section['elements'] as $element){?>
                  <option value="<?=$element['ID']?>"><?=$element['NAME']?></option>
                <?}?>
              </select>
            </div>
          </div>
        </div>
      </div>
    <?}?>
  </div>

Далее, при нажатии на кнопку "Выбрать" данная форма закрывается и информация передается в корзину.
<div class="form-footer clearfix">
    <span class="btn btn-default placeChoose">Выбрать</span>
  </div>

$(document).ready(function(){
  $('.place_sections').on('change', function(){
    var val = $(this).val();
    $('.place_elements.active').removeClass('active');
    $('#placeElements' + val).addClass('active');
  });

  $('.placeChoose').on('click', function(){
    var val = $('.place_elements.active select').val(),
        name = $('.place_elements.active select option:selected').html();
    $.ajax({
      method: 'post',
      url: '/ajax/actions.php',
      data: {action: 'setPlace', place_id: val},
      success: function(data){
        var result = JSON.parse(data);
        if (result){
          whenPlaceChoosen(name); //custom.js
        }
      }
    })
  });
});

Вместо 2 полей необходимо сделать обычное поле для заполнения.
Делаю так (т.е. второе поле убираю)
<div class="place_sections_block">
      <div class="row">
      	<div class="col-md-12">
      	   <div class="form-group animated-labels input-filed">
      		   <label for="POPUP_SERVICE">Город</label>
             <div class="input">
             	<input type="" name="" class="place_sections form-control">
            </div>
          </div>
        </div>
      </div>
    </div>

После чего, при нажатии на "Выбрать" форма не закрывается.
Подскажите, пожалуйста, что делаю не так? Спасибо.

рони 12.08.2019 09:47

_marisha,
может надо поменять
var val = $('.place_elements.active select').val(),
name = $('.place_elements.active select option:selected').html();
на
var val = $('.place_elements.active .place_sections').val(),
name = $('.place_elements.active .place_sections').attr('name');

_marisha 12.08.2019 10:15

рони, спасибо что откликнулись :)
Если сделать так:
$(document).ready(function(){
  $('.place_sections').on('change', function(){
    var val = $(this).val();
    $('.place_elements.active').removeClass('active');
    $('#placeElements' + val).addClass('active');
  });

  $('.placeChoose').on('click', function(){
    var val = $('.place_elements.active .place_sections').val(),
        name = $('.place_elements.active .place_sections').html();
    $.ajax({
      method: 'post',
      url: '/ajax/actions.php',
      data: {action: 'setPlace', place_id: val},
      success: function(data){
        var result = JSON.parse(data);
        if (result){
          whenPlaceChoosen(name); //custom.js
        }
      }
    })
  });
});

Тогда в консоли ошибка:
Uncaught SyntaxError: Unexpected end of JSON input

рони 12.08.2019 10:28

Цитата:

Сообщение от _marisha
name = $('.place_elements.active .place_sections').html();

???

_marisha 12.08.2019 10:32

Прилагаю код файла /ajax/actions.php
if (isset($_POST['action'])){
	switch($_POST['action']){
		case 'setfavplace':
			if (isset($_POST['place_id']) && intval($_POST['place_id'])){
				FavPlaces::setFavs(intval($_POST['place_id']), 'UF_FAV_PLACE');
			}
			break;
    case 'getfavplace':
				echo json_encode(FavPlaces::getFavs());
			break;
		case 'setPlace':
				if (isset($_POST['place_id']) && intval($_POST['place_id'])){
					echo json_encode(FavPlaces::setPlace(intval($_POST['place_id'])));
				}
			break;
		case 'getPlace':
				echo json_encode(FavPlaces::getPlace());
			break;
  }
}

В консоли (вкладка Network):
1) при открытии формы:
id: 211
type: chooseplace
data-trigger: {"class":"btn btn-default pull-right choose_place wplace_choose ch_active","data-event":"jqm","data-param-id":"211","data-param-type":"chooseplace","data-name":"callback1"}

2) при нажатии на "Выбрать":
action: setPlace

laimas 12.08.2019 10:34

Цитата:

Сообщение от _marisha
Unexpected end of JSON input

Значит невалидный JSON получен от сервера.

_marisha 12.08.2019 10:34

Цитата:

Сообщение от рони (Сообщение 511535)
???

У меня опечатка...
Сделано так:
var val = $('.place_elements.active .place_sections').val(),
name = $('.place_elements.active .place_sections').attr('name');

Но в консоли ошибка "Uncaught SyntaxError: Unexpected end of JSON input"

рони 12.08.2019 10:41

_marisha,
var result = JSON.parse(data);, это обычно не нужно!!!
логика немного нарушена, из селектора вы брали код код города и название, как вы ходите получить тоже самое из инпута?

_marisha 12.08.2019 11:12

Цитата:

Сообщение от рони (Сообщение 511541)
_marisha,
var result = JSON.parse(data);, это обычно не нужно!!!
логика немного нарушена, из селектора вы брали код код города и название, как вы ходите получить тоже самое из инпута?

- изначально было другое поле (поле называлось "Место"), которое было в виде выпадающего списка.
Необходимо вместо поля "Место" сделать поле для ввода "Город" ;)

Вывожу в консоль:
var val = $('.place_elements.active .place_sections').val(),
    name = $('.place_elements.active .place_sections').attr('name');
    console.log(val);

Результат undefined

рони 12.08.2019 11:20

_marisha,
может нет .place_elements.active ?
<div class="row place_elements<?=++$counter==1?' active':''?>" id="placeElements<?=$section['ID']?>">


Часовой пояс GMT +3, время: 20:32.