Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Совершенно одинаковые скрипты по-разному ведут себя на разных доменах (https://javascript.ru/forum/jquery/75033-sovershenno-odinakovye-skripty-po-raznomu-vedut-sebya-na-raznykh-domenakh.html)

Ленча 27.08.2018 15:38

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

[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');
                        }
                    });
                    
				});


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

laimas 27.08.2018 16:45

А зачем в двух экземплярах обработчики?

Ленча 27.08.2018 16:57

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

#block_attr_sel_2 для верхнего цвета и #block_attr_sel_42 для нижнего. Они должны работать независимо друг от друга

laimas 27.08.2018 17:30

Цитата:

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

Ваши обработчики ничем не отличаются, различия в цифрах имен классов и 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. У вас и "клонирование" обработчиков, и лишнего в них много.

Dilettante_Pro 27.08.2018 17:55

Цитата:

Сообщение от laimas
"клонирование" обработчиков

Насчет "клонирования" - $(document).ready(function() { и $(function() {

Ленча 27.08.2018 17:58

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

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

laimas 27.08.2018 18:16

Цитата:

Сообщение от Dilettante_Pro
Насчет "клонирования" - $(document).ready(function() { и $(function() {

А я этого не заметил, даже и не прочел. )

laimas 27.08.2018 18:29

Цитата:

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

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

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

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

Цитата:

Сообщение от Ленча
мне все равно не понятно почему на одном сервере работает, а на другом - нет

Возможно есть ошибки, конфликты. Я не смотрел ваш сайт, на данный момент мне не до этого, сорри ;)

Ленча 27.08.2018 19:02

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

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

$('#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');
                    });


остальное - к делу не относится. И, если хотите что-то посоветовать - сначала, пожалуйста, посмотрите на сайт.

laimas 28.08.2018 03:49

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


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