Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   помогите пожалуйста разобраться плавлюсь (https://javascript.ru/forum/dom-window/50007-pomogite-pozhalujjsta-razobratsya-plavlyus.html)

imedia 07.09.2014 14:39

помогите пожалуйста разобраться плавлюсь
 
Пробую яснее изложить проблему.
У меня есть форма в которую добавляются зависимые списки стран по нажатию кнопки добавить и предполагается что поочередно снизу вверх эти списки можно удалять кнопкой удалить
Вот часть кода отвечающая за добавление новых списков с комментарием, вопрос после кода.
function add_new_resort_func(){
//при нажатии на кнопку добавить происходит событие
$('.add_resort_btn').click(function(){
//определяем номер в классе блока в котором нажата кнопка добавить  
var main_par =$('.add_resort_select')
var last_block=main_par.children().last()
var classList = last_block.attr('class').split(/\s+/);
var numer=classList[1].charAt( classList[1].length - 1 );
numer=Number(numer);
//добавляем последующий блок для зависимых списков
var n=numer+1
$('.add_resort_select').append('<div class="blk resort_select_blk_'+n+'"></div>');
//аяксом вставляем в этот блок селект со странами
 $.ajax({
          type: 'POST',
		  dataType:'json',
          url: '/functions_ajax/get_countries/',
          success: function(data) {
		  $('.resort_select_blk_'+n+'').append('<div class="resorts_number"><h3>'+(n+1)+'</h3></div>');
		  $('.resort_select_blk_'+n+'').append('<select class="country_select" name="country_'+n+'"><option>Выберите страну для курорта</option></select><input type="button" class="del_button del_resort_btn" value="X">');
		  $('.add_resort_btn').remove();
			$.each(data, function(key, val) {  
			$('select[name=country_'+n+']').append('<option value="'+val.id+'">'+val.name+'</option>');
			})
        //эта функция добавляет курорты по выбранной стране
			cnt_change()
        //далее предполагаем что необходимо удалить последний блок с зависимыми селектами при нажатии на кнопку удалить
			$('.del_resort_btn').on( "click", function() {
$(this).parent('.blk').siblings(':last').append('<input type="button" class="add_button add_resort_btn" value="+">');
$(this).parent('.blk').remove();
//вот здесь инициализируем главную функцию снова чтобы при нажатии на кнопку добавить добавлялись блоки с зависимыми селектами тут и возникает вопрос
add_new_resort_func()
});
		
          },
          error:  function(xhr, str){
          alert('Возникла ошибка: ' + xhr.responseCode);
          }
}); 
});		
}

почему при многократном нажатии на кнопку удалить, тоесть поочередном удалении многих блоков с зависимыми селектами, а затем при нажатии на кнопку добавить появляется столько блоков с зависимыми селектами сколько раз они были удалены, требуется чтобы один блок добавлялся при нажатии на кнопку добавить
Демонстрация работы формы http://interclient.net/admin_tours/create_tourдва раза пролистнуть вправо затем выбирать австралия

imedia 08.09.2014 12:26

Я изменил постановку вопроса, помогите кто понимает пожалуйста

imedia 08.09.2014 14:11

Да Вы правы но к сожалению сути вопроса это не решит

WorM32 08.09.2014 16:02

Потому что при каждом показе кнопки "добавить", вы навешиваете событие click всем кнопкам "удалить". И чем больше "добавляете", тем больше будет одновременных вызовов при нажатии на любую из "удалить".

imedia 08.09.2014 17:01

Цитата:

Сообщение от WorM32 (Сообщение 329564)
Потому что при каждом показе кнопки "добавить", вы навешиваете событие click всем кнопкам "удалить". И чем больше "добавляете", тем больше будет одновременных вызовов при нажатии на любую из "удалить".

как быть тогда?

WorM32 08.09.2014 17:38

imedia,
Можно повесить обработчик на родителя и фильтровать нужные элементы по селектору.
$(document).on('click', '.del_resort_btn', function () {
    ...
}

imedia 09.09.2014 12:27

спасибо огромное, все гениальное просто:lol:


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