тестирование последовательности событий с использованием jquery - PullRequest
0 голосов
/ 02 марта 2012

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

<!DOCTYPE html> 
<html> 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title> test ground</title> 

    <!-- JQuery specific -->
    <script type="text/javascript" src="libs/jQuery/jQuery.min.js"  ></script>

    <script>
    $(document).ready( function() {
        $.each([
            'blur',  'change',   'click',  'contextmenu', 'copy',
            'cut',   'dblclick',   'error', 'focus',
            'keydown',          'keypress',         'keyup',
            'mousedown',            'mousemove',            'mouseout',
            'mouseover',            'mouseup',
            'mousewheel',           'paste',
            'reset',            'resize',
            'scroll',           'select',
            'submit',
            // W3C events
            'DOMActivate',          'DOMAttrModified',          'DOMCharacterDataModified',
            'DOMFocusIn',           'DOMFocusOut',          'DOMMouseScroll',
            'DOMNodeInserted',          'DOMNodeRemoved',           'DOMSubtreeModified',
            'textInput',

            // Microsoft events
            'activate',
            'beforecopy',
            'beforecut',
            'beforepaste',
            'deactivate',
            'focusin',
            'focusout',
            'hashchange',
            'mouseenter',
            'mouseleave'
        ], function () {
            $('a').live(this, function (evt) {
                alert(this);
            });
        });
    });
    </script>
</head>
<body>
<a href="http://www.google.com"> test </a>
</body>
</html>

Ответы [ 4 ]

1 голос
/ 02 марта 2012

Я скопировал и вставил исходный код из поста переполнения стека, и он отлично сработал для меня. вот ссылка на jsfiddle

1 голос
/ 02 марта 2012

Я предполагаю, что это в контексте обратного вызова упаковывается как объект, и, следовательно, проблема, которую я предполагаю (проверено в последних версиях Firefox и Chrome.) Измените обратный вызов на:

function (a, b) {
        $('a').live(b, function (evt) {
                alert(evt.type);
        });
}

или

function () {
        $('a').live(this.toString(), function (evt) {
                alert(evt.type);
        });
}

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

0 голосов
/ 02 марта 2012

Попробуйте это:

<script>
$(document).ready( function() {
    var el = $("#doIt");

    $.each([
        'blur',  'change',   'click',  'contextmenu', 'copy',
        'cut',   'dblclick',   'error', 'focus',
        'keydown',          'keypress',         'keyup',
        'mousedown',            'mousemove',            'mouseout',
        'mouseover',            'mouseup',
        'mousewheel',           'paste',
        'reset',            'resize',
        'scroll',           'select',
        'submit',
        // W3C events
        'DOMActivate',          'DOMAttrModified',          'DOMCharacterDataModified',
        'DOMFocusIn',           'DOMFocusOut',          'DOMMouseScroll',
        'DOMNodeInserted',          'DOMNodeRemoved',           'DOMSubtreeModified',
        'textInput',

        // Microsoft events
        'activate',
        'beforecopy',
        'beforecut',
        'beforepaste',
        'deactivate',
        'focusin',
        'focusout',
        'hashchange',
        'mouseenter',
        'mouseleave'
    ], function (index, value) {
        el.on(value, function (evt) {
            console.log("Whatever %o", this);
        });
    });
});
</script>

В основном удостоверился, что захватил элемент только один раз (нет необходимости вызывать jQuery как загрузчик), а затем взял имя события из функции, вызванной .each ().

0 голосов
/ 02 марта 2012

При первом вызове this это объект - сделайте его строкой

  $('a').live(this.toString(), function (evt) {                
...