2012-03-03 2 views
0

suppose que j'ai une fonction nomal:un confondez au sujet de paramètre de méthode jquery en direct()

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

Je veux la même fonction pourrait apparaître dans une fonction en direct de l'élément:

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

situation1: le Firebug dirait que le e.dataTransfer est indéfini? cependant, si je change ceci:

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

cela ne pouvait ne fonctionne pas, il dit aussi e.dataTransfer est indéfini,

mais si je l'utilise dans addEventListener (« dragstart », commencer , faux), cela pourrait fonctionner?

Alors, comment puis-je passer le "e" correctement dans la méthode live()?

+0

Qu'est-ce que 'dataTransfer' et d'où vient-il? – JaredPar

+2

Protip: utilisez ['$ .on()'] (http://api.jquery.com/on/) au lieu de live. Vous avez besoin de jQuery 1.7+. Les docs de jQuery déconseillent d'utiliser $ .live() 'et préfèrent' $ .on() 'ou' $ .delegate() 'à la place. – Bojangles

+0

@ JaredPar, il est une API html5 – hh54188

Répondre

4

e.dataTransfer est indéfini non e.

Essayez

e.originalEvent.dataTransfer ...

magasins jQuery l'événement d'origine dans e.originalEvent, le e lui-même est pas un vrai objet événement, mais un objet normal que jQuery créé.

1

$('img.clone').live('click', function (e) { est correct. Si cela ne fonctionne pas, le problème est ailleurs.

Vous devez probablement utiliser e.originalEvent au lieu de e pour accéder à la propriété dataTransfer.

+0

désolé, c'est le e.dataTransfer n'est pas défini – hh54188

+0

Utilisez 'e.originalEvent.dataTransfer' – ThiefMaster

1

C'est parce que this mot-clé dans votre fonction begin appartient à l'objet window et non img.clone.

Aussi, vous n'êtes pas de passage e:

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

devrait être:

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

BTW, live est dépréciée, utilisez plutôt on gestionnaire.