2009-08-06 12 views
7

Ho la necessità di attivare l'apertura del menu di scelta rapida del browser (IE, Firefox, Safari, ecc.) Tramite javascript. Il problema che sto cercando di risolvere è quando un elemento sovrapposto viene cliccato con il pulsante destro del mouse, l'elemento sottostante mostra il suo menu di scelta rapida. Quindi se l'elemento superiore è un'etichetta, quando fai clic con il tasto destro, devo mostrare il menu di scelta rapida per l'elemento di input sottostante.Come attivare il menu di scelta rapida del browser su un elemento. (Come se l'utente abbia fatto clic con il pulsante destro del mouse)

So come mantenere il menu di scelta rapida dell'etichetta da mostrare, ma non so come aprire un menu di scelta rapida arbitrariamente.

Qualsiasi aiuto è apprezzato!

+0

Se fossi al posto tuo, non proverei a modificarlo in questo modo. Probabilmente vorrei capire perché il menu di scelta rapida della casella di input viene visualizzato al posto dell'etichetta. Puoi fornire maggiori dettagli? –

+0

Mi dispiace, l'ho appena cancellato dopo aver letto la domanda. –

+0

Puoi vedere il mio plugin qui: http: // fuelyourcoding.com/scripts/infield/e prova a fare clic con il pulsante destro del mouse sul "contenuto" del campo di testo. Se non riesco ad attivare il menu di scelta rapida del browser, questo rende l'uso di questo plugin piuttosto limitato. –

risposta

13

Mi spiace essere il portatore di notizie sfortunate, ma questo è impossibile da fare con Javascript.

+0

Speravo che questa non fosse la risposta. Andando a lasciarlo aperto ancora un po '.... per ogni evenienza. :) –

+0

Sì, lo lascerei aperto se fossi in te. –

2

Non voglio frustrare voi, al contrario, soprattutto perché avete risposto alla mia domanda :)

non credo che il menù contect di un browser è accessibile tramite uno script normale in una pagina web .

Se ciò che stai chiedendo era effettivamente fattibile, i produttori di browser potrebbero considerare questo un bug e rimuovere questo comportamento. Cross-browser, questo comportamento è molto improbabile che sia disponibile oggi.

Perché non acquisite gli eventi del mouse e ogni volta che il mouse si trova direttamente nell'area dell'elemento sottostante per il quale si desidera visualizzare il menu di scelta rapida, spingere l'elemento di copertura di seguito, altrimenti tornare in cima?

Questa è una possibilità che potrei pensare, fondamentalmente rivelando/esponendo l'elemento nascosto a seconda della posizione del mouse. Come tagliare un buco nel rivestimento.

Oppure perché non si rende trasparente il campo di testo e si inserisce interamente la sovrapposizione sotto il campo di testo?

Se ciò non funziona tecnicamente, almeno si ha un punto nell'archiviazione di bug o miglioramenti rispetto ai browser di destinazione.

BTW sembra che il menu di scelta rapida funzioni effettivamente se l'utente fa clic con il pulsante destro del mouse direttamente sulla posizione del punto di inserimento, quindi questa potrebbe essere un'altra scappatoia da considerare.

+0

Tutti ottimi pensieri. Penso che nella nuova versione aggiungerò il supporto per mostrare l'etichetta * sotto * l'elemento di input in quanto ciò risolverà il problema. Significa solo che l'elemento wrapping deve fornire il colore di sfondo per l'elemento input o textarea. Dovrebbe funzionare comunque! –

0

Possiedo una possibile soluzione adatta alle proprie esigenze. Non è ancora perfetto, ho fatto solo alcuni test rapidi in alcuni browser (Fox 3.6, IE7, IE8, Chrome 4, Safari 3 su xp) Dovrà essere ottimizzato e migliorato, ma è un inizio. Fondamentalmente, l'idea è di rimuovere l'etichetta sul mouse con il tasto destro del mouse in modo che il campo desiderato venga colpito dall'evento mouseup e quindi spari il menu di scelta rapida nel campo pertinente.

// 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; 
    } 
}); 

I browser IE e Safari Experience un problema strano in cui è necessario fare clic e due volte prima l'etichetta mostrerà ancora una volta (qualcosa a che fare con la tempistica dell'evento credo). Potresti essere in grado di capire facilmente perché questo sta accadendo guardando il codice. Ho notato anche qualche piccolo problema a volte nella volpe dopo aver incollato il campo, mentre l'etichetta è sfocata per una frazione di secondo quando non dovrebbe. Questa dovrebbe essere una cosa abbastanza semplice da rettificare se decidi di incorporare questo metodo nel tuo codice.

Problemi correlati