J'essaye d'écrire une option de menu contextuel pour une de mes pages. Fondamentalement, une div est un clic droit, un menu d'options apparaît qui peut être utilisé pour effectuer des tâches.jQuery menu contextuel - trouver quel élément l'a déclenché
Mon problème est d'essayer de trouver l'élément d'origine qui a déclenché tout (c'est-à-dire le div qui a été cliqué avec le bouton droit de la souris).
Mon code jQuery est plus ou moins:
//this is what displays the context menu
$('.outfeedPosition').bind("contextmenu", function (e) {
$('#contextMenu').css({
top: e.pageY + 'px',
left: e.pageX + 'px'
}).show();
//'this' is the element which was clicked by the user.
alert($(this).attr('id'));
return false;
});
//this is the contextMenu's button handler.
$('#ctxDelete').click(function() {
alert('delete was clicked, but i dont know by which element - so I dont know which one to delete');
});
<div id="contextMenu">
<ul>
<li><a id="ctxInsert" href="#">Insert</a></li>
<li><a id="ctxEdit" href="#">Edit</a></li>
<li><a id="ctxDelete" href="#">Delete</a></li>
</ul>
</div>
- donc - je peux voir quel élément a créé l'événement lors de la première clic droit se produit. Mais pas lorsque l'élément de menu est cliqué. Je travaillais à tâtonner quelque chose ensemble en écrivant l'élément dans une zone de texte cachée quand on clique avec le bouton droit de la souris, puis en le lisant quand on clique sur l'une des options, puis en le supprimant quand le menu se ferme. Cela ne semble pas être l'approche idéale - et j'ai l'impression de manquer quelque chose de fondamental.
J'espère que vous verrez ce que j'essaie de faire. Je peux poster un exemple plus complet sur demande.
Deux remarques: 1. Vous utilisez le moteur de sélection pour trouver l'élément #contextMenu plusieurs fois. Il serait raisonnable de mettre en cache cet objet jQuery: 'var $ contextMenu = $ (" # contextMenu ");' 2. Il pourrait être judicieux de se prémunir contre le fait que 'originalElement' ne soit pas défini, auquel cas' originalElement.id' serait lancer une erreur –
Salutations Šime. Je suis d'accord avec vos arguments mais je n'étais pas trop concerné par le refactoring. Je ne faisais que glisser dans le code de l'OP et expliquer comment utiliser les méthodes de données. Dans ce cas, plutôt que de mettre en cache l'objet, vous pouvez simplement bénéficier de l'enchaînement et ne pas avoir besoin de la variable supplémentaire :) –
Merci Jonathon, c'est exactement ce dont j'avais besoin! –