путаница с параметром метода jquery live () - PullRequest
0 голосов
/ 03 марта 2012

Предположим, у меня есть нормальная функция:

    function begin(e) {
        e.dataTransfer.effectAllowed = 'copy';
        e.dataTransfer.setData('text', this.id);
    }

Я хочу, чтобы та же самая функция могла появиться в живой функции одного элемента:

    $('img.clone').live('click', function (e) {
        e.dataTransfer.effectAllowed = 'copy';
        e.dataTransfer.setData('text', this.id);
    })

situ1: firebug скажет e.dataTransfer не определен?однако, если я перехожу на это:

$('img.clone').live('click', function () {
       begin(e);
})

, это не может не работать, он также говорит, что e.dataTransfer не определен,

, но если я использую его в addEventListener ('dragstart', начало, ложь), это может сработать?

Так как я могу правильно передать "e" в методе live ()?

Ответы [ 3 ]

4 голосов
/ 03 марта 2012

e.dataTransfer не определено не e.

Попробуйте

e.originalEvent.dataTransfer ...

jQuery сохраняет исходное событие в e.originalEvent, сам e является не реальным объектом события, а обычным объектом, созданным jQuery.

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

Это потому, что ключевое слово this внутри вашей функции begin принадлежит объекту window, а не img.clone.

Также вы не проходите мимо e:

$('img.clone').live('click', function () {
       begin(e);
})

Должно быть:

$('img.clone').live('click', function (e) {
       begin(e);
})

Кстати, live устарело, рассмотрите возможность использования обработчика on.

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

$('img.clone').live('click', function (e) { правильно. Если это не работает, проблема в другом месте.

Возможно, вам нужно использовать e.originalEvent вместо e для доступа к свойству dataTransfer.

...