Подтвердить что ты не робот

Захват кода javascript, выполняемого onClick

Я работаю над сайтом с множеством устаревших javascript и jquery, и нет документации, чтобы показать, что происходит, когда.

У меня есть определенная проблема для исправления, и я не могу найти соответствующий код, который выполняется при нажатии кнопки. Чтобы спасти меня от траления (и смысла) сотен строк наследия script, есть ли функция, возможно, в Firebug, которая будет определять, что выполняется script, когда я нажимаю кнопку?

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Я считаю, что в окне консоли Firebug есть функция Profile. Нажмите профиль, нажмите кнопку, а затем нажмите профиль еще раз. Он должен дать вам то, что все функции были вызваны в это время. Будьте уверены, что если этот код включает jQuery, вы можете получить огромный длинный список функций, потому что jQuery использует тонны в своем коде. К сожалению, профилировщик также будет показывать анонимные функции, которые могут быть очень больны.

В противном случае выполните поиск в коде для класса или идентификатора кнопки и пройдите через них. Если у вас есть идентификатор fancy, вы можете выполнить поиск #fancy в своем коде и попытаться его найти. Это может привести вас в общем направлении, по крайней мере.

Ответ 2

Вы можете нажать кнопку Firebug "Break on next" (на вкладке Script, она выглядит как кнопка паузы), а затем нажмите кнопку, которую вы хотите отлаживать.

В следующий раз, когда выполняется какой-либо JavaScript-код, Firebug перейдет в отладчик и покажет вам эту строку кода.

Ответ 3

Кнопка break не работает для меня. Вместо этого я редактировал атрибут onclick с FireBug и добавлял его с помощью "отладчика";... тогда вы разломаетесь сразу после нажатия:)

Ответ 4

Ни один из вышеперечисленных ответов не работал у меня. Я пытаюсь использовать Firebug, чтобы выяснить, как функция на странице работает на сайте, на котором я не контролирую. Вот что сработало для меня.

Сначала, я получил идентификатор элемента, который я нажимаю, из источника страницы, а затем получить временную ссылку на него, создав часы (под вкладкой script):

tmp=document.getElementById("idOfElement")

Затем я назначил текущее значение onclick другой временной переменной.

oldfunc=tmp.onclick

Затем я определил новую функцию onclick. Первоначально я попытался поставить debugger; в первую очередь в функции, но это не сработает! Поэтому вместо этого я создал предупреждение:

tmp.onclick = function() { alert("Ok"); oldfunc() }

Теперь, как только я нажимаю на кнопку, появляется предупреждение, после чего я нажимаю кнопку "Перерыв на следующей", как указано в другом ответе на этот вопрос. Затем я увольняю предупреждение и сразу же попадаю в отладчик в правильном месте.

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

Ответ 5

В Firebug вы можете установить точку останова в некотором JS, а затем получить стек, который позволит вам узнать текущий стек вызовов функции. Поэтому, если вы установите точку останова в функции, используемой несколькими обработчиками, вы можете использовать это, чтобы точно определить, в каком обработчике вы находитесь.

Возможно, это не сработает, если вы имеете дело с обратными вызовами AJAX и т.п.