2009-08-06 10 views
7

Mam potrzebę uruchomienia otwierania przeglądarki (IE, Firefox, Safari, itp.) Menu kontekstowego za pośrednictwem javascript. Problem, który próbuję rozwiązać, polega na tym, że po kliknięciu prawym przyciskiem myszy element poniżej pokazuje jego menu kontekstowe. Jeśli więc górny element jest etykietą, po kliknięciu prawym przyciskiem myszy muszę wyświetlić menu kontekstowe dla elementu wejściowego poniżej.Jak wyzwolić menu kontekstowe przeglądarki na elemencie. (Tak jakby użytkownik kliknął prawym przyciskiem)

Wiem, jak wyświetlić menu kontekstowe etykiety, ale nie wiem, jak otworzyć menu kontekstowe w sposób arbitralny.

Każda pomoc jest doceniana!

+0

Gdybym był na twoim miejscu, nie próbowałbym włamywać go w ten sposób. Prawdopodobnie chciałbym zrozumieć, dlaczego zamiast etykiety jest wyświetlane menu kontekstowe pola wprowadzania danych. Czy możesz podać więcej szczegółów? –

+0

Przepraszamy, po prostu skasowano po przeczytaniu pytania. –

+0

Możesz zobaczyć moją wtyczkę tutaj: http: // fuelyourcoding.com/scripts/infield/i spróbuj kliknąć prawym przyciskiem myszy na "treść" pola tekstowego. Jeśli nie mogę wyzwolić menu kontekstowego przeglądarki, to korzystanie z tej wtyczki jest nieco ograniczone. –

Odpowiedz

13

Przykro mi być posiadaczem niefortunnych wiadomości, ale nie można tego zrobić z Javascriptem.

+0

Miałem nadzieję, że to nie była odpowiedź. Mam zamiar zostawić to otwarte na trochę dłużej ... na wszelki wypadek. :) –

+0

Tak, zostawiłbym to otwarte, gdybym był tobą. –

2

Nie chcę zaszkodzić wam, a wręcz przeciwnie, zwłaszcza dlatego, że odpowiedział na moje własne pytanie :)

nie sądzę, że menu contect przeglądarce jest dostępny za pośrednictwem zwykłego skryptu na stronie internetowej .

Jeśli to, o co prosisz, było faktycznie wykonalne, twórcy przeglądarki mogliby uznać to za błąd i usunąć to zachowanie. W różnych przeglądarkach takie zachowanie jest obecnie mało prawdopodobne.

Dlaczego nie przechwytujesz zdarzeń myszy, a gdy mysz znajduje się bezpośrednio w obszarze elementu poniżej, dla którego chcesz wyświetlić menu kontekstowe, naciśnij element pokrywający poniżej, w przeciwnym razie z powrotem na wierzchu?

Jest to jedna z możliwych opcji, o których mógłbym myśleć, odkrywając/odsłaniając ukryty element w zależności od pozycji myszy. Jak wycinanie dziury w nakładce.

A może nie uczynisz pola tekstowego przezroczystym i nie umieścisz nakładki poniżej pola tekstowego?

Jeśli to nie działa technicznie, to przynajmniej masz potrzebę zgłaszania błędów lub ulepszeń w docelowych przeglądarkach.

BTW wygląda na to, że menu kontekstowe rzeczywiście działa, jeśli użytkownik kliknie prawym przyciskiem myszy na miejscu karetki, więc może to być kolejna luka do rozważenia.

+0

Wszystkie bardzo dobre myśli. Myślę, że w nowym wydaniu zamierzam dodać obsługę pokazującą etykietę * poniżej * elementu wejściowego, ponieważ rozwiąże to problem. Oznacza to po prostu, że element owijający musi zapewniać kolor tła dla elementu wejściowego lub obszaru tekstowego. Powinien jednak działać! –

0

Mam możliwe rozwiązanie, które może odpowiadać Twoim potrzebom. To jeszcze nie jest doskonałe, wykonałem tylko kilka szybkich testów w kilku przeglądarkach (Fox 3.6, IE7, IE8, Chrome 4, Safari 3 na xp) To będzie musiało zostać poprawione i ulepszone, ale jest to początek. Zasadniczo chodzi o to, aby usunąć etykietę po kliknięciu prawym przyciskiem myszy, tak aby pożądane pole zostało trafione przez zdarzenie mouseup, a zatem uruchamia menu kontekstowe w odpowiednim polu.

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

przeglądarek IE i Safari doświadczenie dziwny problem, gdzie trzeba kliknąć dwa razy i na zewnątrz przed etykiety będą wyświetlane ponownie (coś z czasu zdarzenia myślę). Możesz łatwo zrozumieć, dlaczego tak się dzieje, patrząc na kod. Zauważyłem również drobną usterkę, czasami u lisa po wklejeniu na pole, na rozmycie etykieta pojawiła się na ułamek sekundy, kiedy nie powinno. To powinno być prostą rzeczą do naprawienia, jeśli zdecydujesz się włączyć tę metodę do swojego kodu.

Powiązane problemy