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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

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

Ответ 8

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

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

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

Ответ 10

Мое предложение - использовать FireFox вместе с FireBug и использовать встроенные объекты Debug/Trace. Это обаяние.