всем привет. на локалке в xampp все работает отлично, однако по какой-то причине на хостинге данное действие выполняется два раза, в следствии чего count увеличивается не на 1, а на 2. для динамически созданного объекта используется $(document).delegate Код (Text): $(document).delegate('form .range a', 'click', function() { parentId = $(this).parent().parent().attr('id'); count = $('#' + parentId + ' input[name="count"]').val(); id = $(this).attr('id'); switch (id) { case ('up'): result = ++count; $('#' + parentId + ' input[name="count"]').val(result); break; case ('down'): if (count !== '1') { result = --count; $('#' + parentId + ' input[name="count"]').val(result); } break; } totalForm(parentId); }); кто подскажет что за нафиг?
В google chrome есть инструменты разработчика, с помощью них можно сделать отладку javascript (chrome javascript debugging)
да если бы оно везде не работало, а то только на хостинге. пробовал я уже через профилирование, в инструментах, ничего не дало
javascript debugging что говорит? brekpoint ставь на DOM и js код, ну или ссылку дай, чтобы посмотреть на глюк.
denis01, да фиг знает, каким то фигом функция второй раз проходит вот тут блок лекго купить. сначала нужно выбрать в форме количество камер - появится количество комплектов и там стрелки на увеличение уменьшение, на них косяк. Добавлено спустя 4 минуты 22 секунды: igordata, ид у родителей уникальные, здесь все в классах
1. айдишники форм измени на человеческие типа id="set-7" 2. вместо id="up" сделай data-act="up" и обращайся через .data('act') после этого можно дальше думать, что не так, потому что ща там всё не так.
igordata, хм, а я чета и так набросал и не загонялся, работало ведь на локале. спасибо что в выходные будничаете на форуме)) пожалуй завтра поправлю и приду к вам вновь - сегодня обуяла вечерняя лень..
Просто нужно переписать всё, думаю где-то логическая ошибка, может два раза добавил event из '#' + parentId + ' input[name="count"]' удали input[name="count"]
мистика какая-то жуткая. Я думаю айдишники виноваты. Середина функции вызывается первой, а потом с начала функция идёт. Ну нахуй. Как это вообще может быть. Код (PHP): $(document).delegate('form .range a', 'click', function() { parentId = $(this).parent().parent().attr('id'); console.log(this);// Эта строка вызывается ВТОРОЙ console.log(parentId);// Потом уже эта count = $('#' + parentId + ' input[name="count"]').val(); console.log(count);// ####### ЭТА СТРОКА ВЫЗЫВАЕТСЯ ПЕРВОЙ (КАК ЭТО?!) ####### id = $(this).attr('id'); console.log(id); switch (id) { case ('up'): result = ++count; $('#' + parentId + ' input[name="count"]').val(result); break; case ('down'): if (count !== '1') { result = --count; $('#' + parentId + ' input[name="count"]').val(result); } break; } totalForm(parentId); }); даёт такой лог: строки чуток отличаются от этих - я причесал код. Но можно видеть, что сначала идёт 55 строка, а потом только 51. Это чудо. Код (Text): VM79 script.js:55 9 VM79 script.js:51 <a id="up"></a> VM79 script.js:52 12 VM79 script.js:55 10 VM79 script.js:60 up
Ага мистика, код два раза вызывает при клике, а если убрать input[name="count"] в хроме начинает нормально работать, но всё равно идёт два вызова.
гы. вот я и говорю, что мистика. все то же самое на домашнем xampp работает верно. upd: ха, проверил на локале копию с движком - такая же хрень. что-то, где-то жизни не дает в mod-x Добавлено спустя 2 минуты 6 секунд: а смысл убирать? оно ведь тогда с инпутом цены начинает работать тоже. поставил пока костыль. в конце функции добавил exit - оператор останавливается обнаружив ошибку)) вторая мистика за вчерашний день. на другом сайте наполнятель менял ссылку, а она никак не менялась в конечном dom, хотя даже в кеше уже была новая. пришлось шарить по всем скриптам и найти $('.price').html('http://ссылка') - учитывая что никаких проблем с заменой ссылки в html через движ не было - это идиотизм
Брейкпоинт ставь@Коллстек гляди Сам же знаешь, что не бывает компутерной магии. Бывает невнимательность. Я тоже кучу раз наталкивался на всякое необъяснимое, которое, в итоге, оказывалось-таки объяснимым и исправлябельным.
Хромыч->девтулз->Sources->нужный скриптец->кинуть брейкпоинт в нужное место; Далее, роняешь скрипт в брейкпоинт. В той же вкладке в девтулзах справа сверху есть свиток "CallStack". Разворачивай его и закуривай Это ж, буквально, микро-IDE для JS)