2009-08-06 9 views
7

Tengo la necesidad de activar la apertura del navegador (IE, Firefox, Safari, etc.) en el menú de contexto a través de javascript. El problema que estoy tratando de resolver es cuando se hace clic derecho en un elemento superpuesto, el elemento debajo de él muestra su menú contextual. Entonces, si el elemento superior es una etiqueta, cuando hace clic derecho, necesito mostrar el menú contextual para el elemento de entrada a continuación.Cómo desencadenar el menú contextual del navegador en un elemento. (Como si el usuario hiciera clic derecho)

Sé cómo evitar que se muestre el menú contextual de la etiqueta, pero no sé cómo abrir un menú contextual arbitrariamente.

¡Se agradece cualquier ayuda!

+0

Si estuviera en tu lugar, no intentaría hackearlo de esta manera. Probablemente querría entender por qué aparece el menú contextual del cuadro de entrada en lugar de la etiqueta. puedes darme mas detalles? –

+0

Lo siento, simplemente lo eliminé después de leer la pregunta. –

+0

Puedes ver mi complemento aquí: http: // fuelyourcoding.com/scripts/infield/e intenta hacer clic derecho en el "contenido" del campo de texto. Si no puedo activar el menú contextual del navegador, hace que el uso de este complemento sea algo limitado. –

Respuesta

13

Lamentamos ser el portador de noticias desafortunadas, pero esto es imposible de hacer con Javascript.

+0

Esperaba que esta no fuera la respuesta. Voy a dejarlo abierto un poco más ... por las dudas. :) –

+0

Sí, lo dejaría abierto si fuera tú. –

2

no quiero a frustrar, sino todo lo contrario, sobre todo por su respuesta a mi propia pregunta :)

no creo que el menú Contect de un navegador se puede acceder a través de un texto normal en una página web .

Si lo que está solicitando es realmente factible, los fabricantes de navegadores posiblemente lo consideren un error y eliminen este comportamiento. Cross-browser, es poco probable que este comportamiento esté disponible hoy.

¿Por qué no captura los eventos del mouse, y cada vez que el mouse está directamente en el área del elemento inferior para el que desea mostrar el menú contextual, presione el elemento de cubierta siguiente, de lo contrario, vuelva a la parte superior?

Esa es una posibilidad en la que podría pensar, básicamente revelando/exponiendo el elemento oculto dependiendo de la posición del mouse. Como cortar un agujero en la superposición.

¿O por qué no haces que el campo de texto sea transparente y colocas la superposición debajo del campo de texto por completo?

Si esto no funciona técnicamente, al menos tiene un punto en la presentación de errores o mejoras en contra de los navegadores dirigidos.

BTW Parece que el menú de contexto realmente funciona si el usuario hace clic derecho en la posición del símbolo de intercalación, por lo que esta podría ser otra laguna para que considere.

+0

Todos muy buenos pensamientos. Creo que en el nuevo lanzamiento voy a agregar soporte para mostrar la etiqueta * debajo * del elemento de entrada, ya que esto resolverá el problema. Simplemente significa que el elemento de envoltura necesita proporcionar el color de fondo para el elemento de entrada o el área de texto. Debería funcionar sin embargo! –

0

Tengo una posible solución que se adapte a sus necesidades. Todavía no es perfecto, solo he hecho unas pocas pruebas rápidas en algunos navegadores (Fox 3.6, IE7, IE8, Chrome 4, Safari 3 en XP). Deberá modificarse y mejorarse, pero es un comienzo. Básicamente, la idea es eliminar la etiqueta al hacer clic con el botón derecho en el mousedown para que el evento deseado haga clic en el campo deseado y, por lo tanto, desencadena el menú contextual en el campo correspondiente.

// Remove the contextmenu from "In-Field" Labels 
base.$label.bind("contextmenu",function(e){ 
    return false; 
}); 

// Detect right click on "In-Field" label: 
// hide label on mousedown so mouseup will target the field underneath. 
base.$label.mousedown(function(e){   
    if (e.which == 3){ 
     var elLbl = $(this); 
     elLbl.hide(); 
     var elFid = $(this).attr("for"); 
     // bind blur event to replace the label when we are done. 
     $("#" + elFid).bind("blur.infieldlabel",function(){      
      elLbl.show(); 
      $("#" + elFid).unbind("blur.infieldlabel");      
     });    
     return false; 
    } 
}); 

Los navegadores Internet Explorer y Safari experimentar un problema extraño donde es necesario hacer clic en y fuera dos veces antes de la etiqueta mostrará de nuevo (algo que ver con la sincronización caso creo). Es posible que pueda ver fácilmente por qué sucede esto mirando el código. También notó un ligero error a veces en el zorro después de pegar en el campo, en la falta de definición de la etiqueta apareció por una fracción de segundo cuando no debería. Esto debería ser una cosa bastante simple para rectificar si decide incorporar este método en su código.

Cuestiones relacionadas