Как отслеживать события JavaScript, такие как onclick onblur?

StackOverflow https://stackoverflow.com/questions/91367

  •  01-07-2019
  •  | 
  •  

Вопрос

Есть ли способ отладить или отследить каждое событие JavaScript в Internet Explorer 7?

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

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

Это было полезно?

Решение

Сказал Боркдуде:

Возможно, вы захотите попробовать Visual Studio 2008 и его функцию для отладки кода JavaScript.

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

Если проблема не специфична для Internet Explorer 7, но также возникает в Firefox, то другим хорошим способом отладки кода JavaScript является Firefox и Поджигатель надстройка, в которой есть отладчик JavaScript.

И есть еще кое-что Firebug Lite ( Файербаг Лайт ) для Internet Explorer.У меня не было возможности им воспользоваться, но оно существует.:-) Недостатком этого является то, что это не полноценный отладчик, но у него есть объект window.console, который является именно тем, что вам нужно.

Другие советы

Выполните цикл по всем элементам на странице, для которых определена функция onXYZ, а затем добавьте к ним трассировку:

var allElements = document.all; // Is this right? Anyway, you get the idea.

for (var i in allElements) {
    if (typeof allElements[i].onblur == "function") {
        var oldFunc = allElements[i].onblur;
        allElements[i].onblur = function() {
             alert("onblur called");
             oldFunc();
        };
    }
}

Возможно, вы захотите попробовать Visual Studio 2008 и его функцию для отладки кода JavaScript.

Если проблема не специфична для Internet Explorer 7, но также возникает в Firefox, то другим хорошим способом отладки кода JavaScript является Firefox и Поджигатель надстройка, в которой есть отладчик JavaScript.Тогда вы также можете положить console.log инструкции в коде JavaScript, выходные данные которых вы затем можете увидеть в Окно консоли в Firebug вместо использования оповещений, которые иногда портят цепочку событий.

@[nickf] - Я почти уверен document.all это специфичное для Internet Explorer расширение.

Вам нужно прикрепить обработчик событий, нет никакого способа просто "наблюдать" за событиями.Фреймворк, подобный jQuery из библиотеки Microsoft Ajax, легко предоставит вам методы для добавления обработчиков событий.jQuery хорош из-за своей структуры селектора.

Затем я использую Firebug (расширение Firefox) и устанавливаю точку останова.Я нахожу, что Firebug намного проще настроить и демонтировать, чем Visual Studio 2008.

Это элементарно, но вы могли бы вставлять оповещения или вызовы document.write, когда вы что-то запускаете.

Очевидным способом было бы настроить несколько оповещений о различных событиях, что-то вроде:

element.onclick = function () { alert('Click event'); }

В противном случае у вас есть менее навязчивый вариант вставить свои оповещения куда-нибудь в dom.

Но серьезно подумайте об использовании такой библиотеки, как jQuery для реализации вашей функциональности.Многие проблемы с кроссбраузерностью - это решаемые проблемы, и вам не нужно решать их снова.Я не уверен точно в функциональности, которой вы пытаетесь достичь, но, скорее всего, есть множество плагинов для прокрутки и выбора jQuery, которые вы могли бы использовать.

Я не уверен в точном коде (прошло некоторое время с тех пор, как я писал сложный код JavaScript), но вы могли бы перечислить все элементы управления в форме и прикрепить событие, которое выводит что-то при запуске события.

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

Одна вещь, которую мне нравится делать, это создать функцию привязки в JavaScript (например, то, что вы можете найти в Прототип library) специально для событий, так что он передает объект "event" связанной функции.Теперь, если бы вы хотели это сделать, вы могли бы просто запустить вызов трассировки, который будет вызываться для каждого обработчика, который его использует.А затем удалите его, когда в нем не будет необходимости.В одном месте.Легко.

Однако, независимо от того, как вы вызываете оператор trace, вы все равно хотите его увидеть.Лучшая стратегия - иметь отдельную панель или окно, передающее вызовы трассировки. Инструментарий для Додзе имеет встроенную консоль, которая работает в Internet Explorer, и там есть другие подобные вещи.Классический способ сделать это - создать новое окно и document.write к нему.

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

У Мэтта Берсета есть кое-что, что, возможно, именно то, что вы ищете в Отладка ASP.NET AJAX-приложений с помощью консоли трассировки AjaxControlToolkit Control.

Он основан на Yahoo ЮИ регистратор, ЮИ 2:Регистратор.

Мое предложение заключается в том, чтобы использовать FireFox вместе с FireBug и использовать встроенные объекты отладки / трассировки.Они просто прелесть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top