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

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

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

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

10 ответов


Borkdude сказал:

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

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

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

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


пройдите через все элементы на странице, которые имеют определенную функцию 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.


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


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

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

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

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


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

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


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

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

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

Мэтт Berseth есть что-то, что может быть то, что вы ищете в отладка ASP.NET приложения AJAX с консолью трассировки AjaxControlToolkit Control.

Он основан на Yahoo YUI регистратор, YUI 2: Logger.


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