Как отследить события JavaScript, такие как onclick onblur? - PullRequest
11 голосов
/ 18 сентября 2008

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

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

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

Ответы [ 10 ]

11 голосов
/ 18 сентября 2008

Перебрать все элементы на странице, для которых определена функция 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();
        };
    }
}
2 голосов
/ 18 сентября 2008

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

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

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

2 голосов
/ 18 сентября 2008

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

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

1 голос
/ 18 сентября 2008

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

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

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

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

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

0 голосов
/ 18 сентября 2008

Я предлагаю использовать FireFox вместе с FireBug и использовать встроенные объекты Debug / Trace. Это очарование.

0 голосов
/ 18 сентября 2008

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

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

0 голосов
/ 18 сентября 2008

Мне нравится создавать в JavaScript функцию связывания (например, то, что вы можете найти в библиотеке Prototype ) специально для событий, чтобы она передавала объект «событие» в привязку функция. Теперь, если вы сделаете это, вы можете просто добавить вызов трассировки, который будет вызываться для каждого обработчика, который его использует. А затем удалите его, когда он не нужен. Одно место. Легко.

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

  • Я рекомендую прикреплять дату и время к каждой трассировке. Значительно помог мне в прошлом.
  • Отладка и оповещения обычно вам не помогут, поскольку они прерывают нормальный поток событий.
0 голосов
/ 18 сентября 2008

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

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

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

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

0 голосов
/ 18 сентября 2008

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

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

0 голосов
/ 18 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...