За последние 24 часа нас посетили 23548 программистов и 1664 робота. Сейчас ищут 839 программистов ...

на хостинге click выполняется 2 раза

Тема в разделе "JavaScript и AJAX", создана пользователем rewuxiin, 1 фев 2015.

  1. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    всем привет.
    на локалке в xampp все работает отлично, однако по какой-то причине на хостинге данное действие выполняется два раза, в следствии чего count увеличивается не на 1, а на 2.

    для динамически созданного объекта используется $(document).delegate
    Код (Text):
    1.  
    2. $(document).delegate('form .range a', 'click', function() {    
    3.  
    4.     parentId = $(this).parent().parent().attr('id');
    5.     count = $('#' + parentId + ' input[name="count"]').val();
    6.     id = $(this).attr('id');
    7.  
    8.     switch (id) {
    9.         case ('up'):            
    10.             result = ++count;
    11.             $('#' + parentId + ' input[name="count"]').val(result);
    12.             break;
    13.  
    14.         case ('down'):
    15.             if (count !== '1') {
    16.                 result = --count;
    17.                 $('#' + parentId + ' input[name="count"]').val(result);
    18.             }
    19.             break;
    20.     }
    21.     totalForm(parentId);    
    22.  
    23. });
    кто подскажет что за нафиг?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В google chrome есть инструменты разработчика, с помощью них можно сделать отладку javascript (chrome javascript debugging)
     
  3. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    да если бы оно везде не работало, а то только на хостинге.
    пробовал я уже через профилирование, в инструментах, ничего не дало
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    javascript debugging что говорит? brekpoint ставь на DOM и js код, ну или ссылку дай, чтобы посмотреть на глюк.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Жопой чую, что т.к. id применяются неверно, то могут быть неуникальными
     
  6. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    denis01, да фиг знает, каким то фигом функция второй раз проходит

    вот тут
    блок лекго купить.

    сначала нужно выбрать в форме количество камер - появится количество комплектов и там стрелки на увеличение уменьшение, на них косяк.

    Добавлено спустя 4 минуты 22 секунды:
    igordata, ид у родителей уникальные, здесь все в классах
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    1. айдишники форм измени на человеческие типа id="set-7"

    2. вместо id="up" сделай data-act="up" и обращайся через .data('act')

    после этого можно дальше думать, что не так, потому что ща там всё не так.
     
  8. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    igordata, хм, а я чета и так набросал и не загонялся, работало ведь на локале.
    спасибо что в выходные будничаете на форуме))
    пожалуй завтра поправлю и приду к вам вновь - сегодня обуяла вечерняя лень..
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Просто нужно переписать всё, думаю где-то логическая ошибка, может два раза добавил event

    из '#' + parentId + ' input[name="count"]' удали input[name="count"]
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    В любом случае надо на дата-атрибуты переделать и правильно юзать id.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    мистика какая-то жуткая. Я думаю айдишники виноваты.

    Середина функции вызывается первой, а потом с начала функция идёт. Ну нахуй. Как это вообще может быть.

    Код (PHP):
    1. $(document).delegate('form .range a', 'click', function() {
    2.     parentId = $(this).parent().parent().attr('id');
    3.     console.log(this);// Эта строка вызывается ВТОРОЙ
    4.     console.log(parentId);// Потом уже эта
    5.     count = $('#' + parentId + ' input[name="count"]').val();
    6.     console.log(count);// ####### ЭТА СТРОКА ВЫЗЫВАЕТСЯ ПЕРВОЙ (КАК ЭТО?!) #######
    7.     id = $(this).attr('id');
    8.     console.log(id);
    9.  
    10.     switch (id) {
    11.         case ('up'):
    12.             result = ++count;
    13.             $('#' + parentId + ' input[name="count"]').val(result);
    14.             break;
    15.  
    16.         case ('down'):
    17.             if (count !== '1') {
    18.                 result = --count;
    19.                 $('#' + parentId + ' input[name="count"]').val(result);
    20.             }
    21.             break;
    22.     }
    23.     totalForm(parentId);
    24.     
    25. }); 
    даёт такой лог:
    строки чуток отличаются от этих - я причесал код. Но можно видеть, что сначала идёт 55 строка, а потом только 51. Это чудо.
    Код (Text):
    1.  
    2. VM79 script.js:55 9
    3. VM79 script.js:51 <a id="up"></a>
    4. VM79 script.js:52 12
    5. VM79 script.js:55 10
    6. VM79 script.js:60 up
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ага мистика, код два раза вызывает при клике, а если убрать input[name="count"] в хроме начинает нормально работать, но всё равно идёт два вызова.
     
  13. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    гы. вот я и говорю, что мистика. все то же самое на домашнем xampp работает верно.
    upd: ха, проверил на локале копию с движком - такая же хрень.
    что-то, где-то жизни не дает в mod-x

    Добавлено спустя 2 минуты 6 секунд:
    а смысл убирать? оно ведь тогда с инпутом цены начинает работать тоже.

    поставил пока костыль. в конце функции добавил exit - оператор останавливается обнаружив ошибку))

    вторая мистика за вчерашний день.
    на другом сайте наполнятель менял ссылку, а она никак не менялась в конечном dom, хотя даже в кеше уже была новая.
    пришлось шарить по всем скриптам и найти $('.price').html('http://ссылка') - учитывая что никаких проблем с заменой ссылки в html через движ не было - это идиотизм
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Брейкпоинт ставь@Коллстек гляди

    Сам же знаешь, что не бывает компутерной магии. Бывает невнимательность. Я тоже кучу раз наталкивался на всякое необъяснимое, которое, в итоге, оказывалось-таки объяснимым и исправлябельным.
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Я не умею смотреть коллстек яваскрипта в браузере
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хромыч->девтулз->Sources->нужный скриптец->кинуть брейкпоинт в нужное место;
    Далее, роняешь скрипт в брейкпоинт. В той же вкладке в девтулзах справа сверху есть свиток "CallStack". Разворачивай его и закуривай :)

    Это ж, буквально, микро-IDE для JS)