Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [javascript] context menu visibile solo con IE

    Salve,

    Ultimamente ho creato un menu contestuale visibile se viene premuto il tasto destro, mentre se il menù è già aperto basta premere il testo destro o sinistro del mouse, insomma quasi come quello di windows.

    Il problema è che va solamente su exprorer, questo è il suo codice:
    codice:
    <script type="text/javascript">
      function Show() 
      {
        if (document.getElementById("context") != null) 
    	{
    	  document.body.removeChild(document.getElementById("context"));
    	}
    	else
    	{
    	var context = document.createElement("div");
    	
    	context.setAttribute("id", "context");
    	
    	var items = new Array();
    	items[0] = "Primo link";
    	items[1] = "Secondo link";
    	items[2] = "Terso link";
    	items[3] = "-";
        items[4] = "Info link";
    	
    	var address = new Array();
    	address[0] = "http://www.html.it";
    	address[1] = "http://www.google.it";
    	address[2] = "http://www.altervista.org";
    	address[3] = "-";
    	address[4] = ""
    	
    	for (var i = 0; i < items.length; i++)
    	{
    	   if (items[i] == "-")
    	   {
    	     context.innerHTML = context.innerHTML + "<hr />";
    	   }
    	   else 
    	   {
    	     context.innerHTML = context.innerHTML + "<div id='items'>" + items[i] + "</div>";
    	   }
    	}
    	
    	context.style.top = event.clientY;
    	context.style.left = event.clientX;
    	
    	document.body.appendChild(context);
    	}
      }
      document.oncontextmenu= function()
      {
         Show();
    	 return false;
      }
      document.onclick = function() {
         Show();
      }
    </script>
    Da quello che pare su FF non mi crea il div, ma non saprei, potrete dirmi qualè il problema?

  2. #2
    E' perché in firefox la gestione degli eventi è diversa da IE:

    quando in IE sei all'interno di una funzione legata ad un determinato evento, hai a disposizione una variabile, window.event, che contiene l'oggetto Event corrispondente all'evento in corso. In firefox questa variabile non esiste, alle funzioni legate agli eventi viene passato come primo parametro l'oggetto Event corrispondente.

    Quello che devi fare è cambiare la funzione Show in modo che prenda in ingresso una variabile, che conterrà un evento e cambiare le righe che usano il clientX e clientY:

    codice:
    function Show(evt){
    	// Quello che sta prima
    	context.style.top = evt.clientY;
    	context.style.left = evt.clientX;
    	// Quello che sta dopo
    }
    e le funzioni di assegnamento degli eventi:

    codice:
    document.oncontextmenu= function(e)
    {
    	Show(window.event || e); //Quello tra le parentesi significa: passami il valore di window.event se non è null, false o 0, altrimenti il valore e
    	return false;
    }
    document.onclick = function(e) {
    	Show(window.event || e); //Stessa cosa
    }
    Ora a me funziona.
    I DON'T Double Click!

  3. #3
    Ora su internet explorer mi funziona, mentre su firefox il menu mi si apre e chiude premendo il testo sinistro del mouse sempre alla stessa posizione, cioè l'attributo top e left mi rimane a 0

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.