Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.08.2018, 15:38
Аспирант
Отправить личное сообщение для Ленча Посмотреть профиль Найти все сообщения от Ленча
 
Регистрация: 13.07.2014
Сообщений: 78

Совершенно одинаковые скрипты по-разному ведут себя на разных доменах
Здесь работает нормально. Это тестовый домен, фотки не заливала.

[del]

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

А здесь не работает. Это рабочий домен.

[del]

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

Не могу понять разницы, все залито один в один. Работает вот этот скрипт.

$(document).ready(function() {						
                    $(function() {
                        $(".input_type_radio .radio_attr_label").each(function(indx, el){
                            $(el.lastChild).wrap('<span class="colorname"/>')
                        });
                    });


                    $('#block_attr_sel_2 .input_type_radio').click(function(){
                        $('#block_attr_sel_2 .input_type_radio').removeClass('selected');
                        $(this).addClass('selected');
                        $(".attributes_2 label.attributes_title span.colorname").remove();
                        $('.attributes_2 .input_type_radio.selected span.colorname').clone().appendTo('.attributes_2 .attributes_title .attributes_name');
                    });

                    
                    $(window).on('load resize', function(){
                        if ($(window).width() <= 664) {
                            $('.attributes_2').insertAfter('.image_middle');
                        }
                    });

                    $('#block_attr_sel_42 .input_type_radio').click(function(){
                        $('#block_attr_sel_42 .input_type_radio').removeClass('selected');
                        $(this).addClass('selected');
                        $(".attributes_42 label.attributes_title span.colorname").remove();
                        $('.attributes_42 .input_type_radio.selected span.colorname').clone().appendTo('.attributes_42 .attributes_title .attributes_name');
                    });

                    $(window).on('load resize', function(){
                        if ($(window).width() <= 664) {
                            $('.attributes_42').insertAfter('.image_middle');
                        }
                    });
                    
				});


Вообще не понимаю в чем дело

Последний раз редактировалось Ленча, 28.08.2018 в 08:56.
Ответить с цитированием
  #2 (permalink)  
Старый 27.08.2018, 16:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А зачем в двух экземплярах обработчики?
Ответить с цитированием
  #3 (permalink)  
Старый 27.08.2018, 16:57
Аспирант
Отправить личное сообщение для Ленча Посмотреть профиль Найти все сообщения от Ленча
 
Регистрация: 13.07.2014
Сообщений: 78

Для каждого атрибута отдельный обработчик.

#block_attr_sel_2 для верхнего цвета и #block_attr_sel_42 для нижнего. Они должны работать независимо друг от друга
Ответить с цитированием
  #4 (permalink)  
Старый 27.08.2018, 17:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Ленча
Для каждого атрибута отдельный обработчик.
Ваши обработчики ничем не отличаются, различия в цифрах имен классов и id. Можно ведь написать один, используя в качестве селектора то что начинается с attributes. К тому же, $('#block_attr_sel_42 .input_type_radio').click .... уж не как не предполагает в обработчике $('#block_attr_sel_42 .input_type_radio').removeClass, ибо в обработчике $('#block_attr_sel_42 .input_type_radio') будут доступны как this. У вас и "клонирование" обработчиков, и лишнего в них много.
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2018, 17:55
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от laimas
"клонирование" обработчиков
Насчет "клонирования" - $(document).ready(function() { и $(function() {
Ответить с цитированием
  #6 (permalink)  
Старый 27.08.2018, 17:58
Аспирант
Отправить личное сообщение для Ленча Посмотреть профиль Найти все сообщения от Ленча
 
Регистрация: 13.07.2014
Сообщений: 78

Я пока не представляю как можно написать один обработчик вместо двух так, чтоб щелчок по одному никак не сказывался на другом.

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

Последний раз редактировалось Ленча, 27.08.2018 в 18:01.
Ответить с цитированием
  #7 (permalink)  
Старый 27.08.2018, 18:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Dilettante_Pro
Насчет "клонирования" - $(document).ready(function() { и $(function() {
А я этого не заметил, даже и не прочел. )
Ответить с цитированием
  #8 (permalink)  
Старый 27.08.2018, 18:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Ленча
не представляю как можно написать один обработчик вместо двух так, чтоб щелчок по одному никак не сказывался на другом.
Ну здесь то $(window).on('load resize', ... о каком щелчке речь, к тому же обработчикам определено обрабатывать событие onload, в обработчике которого и устанавливаются они - $(document).ready(function() ...? Значит нужна функция, в которой $('.attributes_2, .attributes_42').insertAfter('.image_middle'), которая должна выполняется при загрузке страницы и при изменении размеров бразура.

Посмотрите на селекторы по атрибутам jQuery, посредством которых можно описать один обработчик $('#block_attr_sel_2 .input_type_radio').click ... вместо двух и проблем никаких с определением источника событий внутри него не будет, как и с поиском родителя.

Вы хотя бы попробуйте, с ошибками помогут разобраться.

Сообщение от Ленча
мне все равно не понятно почему на одном сервере работает, а на другом - нет
Возможно есть ошибки, конфликты. Я не смотрел ваш сайт, на данный момент мне не до этого, сорри
Ответить с цитированием
  #9 (permalink)  
Старый 27.08.2018, 19:02
Аспирант
Отправить личное сообщение для Ленча Посмотреть профиль Найти все сообщения от Ленча
 
Регистрация: 13.07.2014
Сообщений: 78

он ресайз идет совсем другая функция. Меня интересуют те, что на клик.

Забудьте обо всем, кроме вот этих двух вещей

$('#block_attr_sel_2 .input_type_radio').click(function(){
                        $('#block_attr_sel_2 .input_type_radio').removeClass('selected');
                        $(this).addClass('selected');
                        $(".attributes_2 label.attributes_title span.colorname").remove();
                        $('.attributes_2 .input_type_radio.selected span.colorname').clone().appendTo('.attributes_2 .attributes_title .attributes_name');
                    });                    

                    $('#block_attr_sel_42 .input_type_radio').click(function(){
                        $('#block_attr_sel_42 .input_type_radio').removeClass('selected');
                        $(this).addClass('selected');
                        $(".attributes_42 label.attributes_title span.colorname").remove();
                        $('.attributes_42 .input_type_radio.selected span.colorname').clone().appendTo('.attributes_42 .attributes_title .attributes_name');
                    });


остальное - к делу не относится. И, если хотите что-то посоветовать - сначала, пожалуйста, посмотрите на сайт.
Ответить с цитированием
  #10 (permalink)  
Старый 28.08.2018, 03:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Посмотрел. По первой ссылке не понять чего там правильного, по второй меняются картинки при выборе, что при этом "ломается" я не знаю, если выбор цвета перекладин, то не наблюдается. Все это до поры до времени, пока сценарии не подвешивают браузер, а отладчик сообщает об ошибках. Если при этом сказать, что html структура ваших block_attr_sel перегружены элементами, да они еще и нативные события обрабатывают, вы же мне предъявите претензии, что это мелочи и не важно.
Ответить с цитированием
Ответ



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

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