混淆jquery live()方法参数

时间:2012-03-03 17:34:55

标签: jquery live

假设我有一个正常的功能:

    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);
    })
情况1:萤火虫会说e.dataTransfer未定义? 但是,如果我改为:

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

这可能不起作用,它也说e.dataTransfer是未定义的,

但如果我在addEventListener('dragstart',begin,false)中使用它,这可能有用吗?

那么如何在live()方法中正确传递“e”?

3 个答案:

答案 0 :(得分:4)

e.dataTransfer未定义,而非e

尝试

e.originalEvent.dataTransfer ...

jQuery将原始事件存储在e.originalEvent中,e本身不是真正的事件对象,而是jQuery创建的普通对象。

答案 1 :(得分:1)

$('img.clone').live('click', function (e) {是正确的。如果它不起作用,则问题出在其他地方。

您可能需要使用e.originalEvent代替e才能访问dataTransfer媒体资源。

答案 2 :(得分:1)

这是因为this函数中的begin个关键字属于window个对象,而不属于img.clone

你也没有通过e

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

应该是:

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

BTW,live已弃用,请考虑使用on处理程序。