假设我有一个正常的功能:
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”?
答案 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
处理程序。