Estoy tratando de escribir una opción de menú contextual para una página mía. Básicamente, se hace clic derecho en un div, aparece un menú de opciones que se puede usar para realizar tareas.jQuery menú contextual - encontrar qué elemento lo desencadenó
Mi problema es tratar de encontrar el elemento original que desencadenó todo (es decir, el div que se hizo clic derecho).
Mi código jQuery es más o menos:
//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>
- Por lo tanto - Puedo ver qué elemento creado el evento inicial cuando el botón derecho del ratón pasa. Pero no cuando se hace clic en el elemento del menú.
Estaba trabajando en buscar algo a tientas escribiendo el elemento en un cuadro de texto oculto cuando se hace clic derecho, luego lo leo cuando se hace clic en una de las opciones, y luego lo quito cuando se cierra el menú. Aunque no parece el enfoque ideal, siento que me falta algo básico.
Espero que veas lo que estoy tratando de hacer. Puedo publicar un ejemplo más completo a pedido.
Dos comentarios: 1. Está utilizando el motor selector para encontrar el elemento #contextMenu varias veces. Sería razonable almacenar en caché ese objeto jQuery: 'var $ contextMenu = $ (" # contextMenu ");' 2. Podría ser una buena idea evitar que 'originalElement' sea indefinido, en cuyo caso' originalElement.id' haría lanzar un error –
Cheers Šime. Estoy de acuerdo con sus puntos, pero no estaba demasiado preocupado con la refactorización. Estaba insertando en el código del OP y dejando en claro cómo usar los métodos de datos. En esta instancia, en lugar de almacenar en caché el objeto, puede beneficiarse del encadenamiento y no requerir la variable adicional :) –
¡Gracias Jonathon, eso es justo lo que necesitaba! –