Интересует отслеживание событий, которые запускаются, когда пользователь просматривает сайт - PullRequest
5 голосов
/ 30 ноября 2011

Мне было интересно, можно ли сделать следующее:

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

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

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

 $('input:submit, button:submit').rightClick(function (e) {
    $(this).contextMenu('contextMenuInput', {
        'Capture This': {
            click: function (element) {   // element is the jquery obj clicked on when context menu launched
                doSomething();
            },
            klass: "kgo" // a custom css class for this menu item (usable for styling)
        },
        'Create List': {
            click: function (element) {
            },
            klass: "kfilter kdisabled"
        },
        'Collect Data': {
            click: function (element) {
            },
            klass: "kcapture kdisabled"
        }
    },
    { disable_native_context_menu: true }
);
});

У кого-нибудь есть идеи?

Ответы [ 2 ]

3 голосов
/ 30 ноября 2011

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

вот пример использования этого кода: http://jsfiddle.net/manseuk/CNjs3/

(function($) {
    $.eventReport = function(selector, root) {
        var s = [];
        $(selector || '*', root).andSelf().each(function() {
            var e = $.data(this, 'events');
            if(!e) return;
            s.push(this.tagName);
            if(this.id) s.push('#', this.id);
            if(this.className) s.push('.', this.className);
            for(var p in e) s.push('\n', p);
            s.push('\n\n');
        });
        return s.join('');
    }
    $.fn.eventReport = function(selector) {
        return $.eventReport(selector, this);
    }
})(jQuery);

Используйте его следующим образом ->

// all events
alert($.eventReport());

// just events on inputs
alert($.eventReport('input')); 

// just events assigned to this element
alert($.eventReport('#myelement')); 

// events assigned to inputs in this element
alert($.eventReport('input', '#myelement')); 
alert($('#myelement').eventReport('input')); // same result

// just events assigned to this element's children
alert($('#myelement').eventReport()); 
alert($.eventReport('*', '#myelement'); // same result

Обновлено в соответствии с комментариями

Если вы хотите увидеть, что связано с этими событиями, это отличный инструмент -> http://www.sprymedia.co.uk/article/Visual+Event

0 голосов
/ 30 ноября 2011

Это не совсем то, что вы ищете, но с помощью firebug вы можете регистрировать события для данного элемента DOM.

Вы можете сделать это, щелкнув правой кнопкой мыши на элементе на вкладке html и нажав журнал событий:

enabling log events for a dom element in firebug

Журнал событий:

logged events

Вы также можете найти расширение firebug "EventBug" полезным:

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