12

javascript を使用して、ブラウザー (IE、Firefox、Safari など) のコンテキスト メニューを開く必要があります。私が解決しようとしている問題は、オーバーレイされた要素を右クリックすると、その下の要素にコンテキスト メニューが表示されることです。したがって、一番上の要素がラベルの場合、右クリックすると、下の入力要素のコンテキスト メニューを表示する必要があります。

ラベルのコンテキスト メニューを非表示にする方法は知っていますが、コンテキスト メニューを任意に開く方法はわかりません。

どんな助けでも大歓迎です!

4

3 に答える 3

18

残念なニュースの担い手になって申し訳ありませんが、これは Javascript では不可能です。

于 2009-08-06T21:23:02.757 に答える
3

特にあなたが私自身の質問に答えたので、まったく逆に、私はあなたを苛立たせたくありません:)

Web ページ上の通常のスクリプトを介してブラウザーのコンテキスト メニューにアクセスできるとは思いません。

あなたが求めていることが実際に実行可能である場合、ブラウザ メーカーはこれをバグと見なし、この動作を削除する可能性があります。クロスブラウザーで、この動作が現在利用できる可能性はほとんどありません。

マウスイベントをキャプチャして、コンテキストメニューを表示したい要素の領域にマウスが直接あるときはいつでも、下のカバー要素を押してください。

それは私が考えることができる1つの可能性であり、基本的にマウスの位置に応じて非表示の要素を明らかに/公開します。オーバーレイに穴を開けるようなものです。

または、テキスト フィールドを透明にして、テキスト フィールドの下にオーバーレイを完全に配置しないのはなぜですか?

これが技術的にうまくいかない場合は、少なくとも対象となるブラウザーに対してバグや機能強化を報告する必要があります。

ところで、ユーザーがキャレットの位置を直接右クリックすると、コンテキスト メニューが実際に機能するように見えるため、これは考慮すべき別の抜け穴である可能性があります。

于 2010-01-17T03:50:18.337 に答える
2

あなたのニーズに合った可能な解決策があります。まだ完璧ではありません。いくつかのブラウザー (Fox 3.6、IE7、IE8、Chrome 4、XP の Safari 3) でいくつかの簡単なテストを行っただけです。基本的には、マウスダウンの右クリックでラベルを削除して、目的のフィールドが mouseup イベントにヒットし、関連するフィールドのコンテキスト メニューが表示されるようにすることです。

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

IE および Safari ブラウザーでは、ラベルが再び表示される前に 2 回クリックインおよびクリックアウトする必要があるという奇妙な問題が発生します (イベントのタイミングと関係があると思います)。コードを見れば、なぜこれが起こっているのかを簡単に理解できるかもしれません。また、フィールドに貼り付けた後、キツネにわずかな不具合が時々あることに気付きました。このメソッドをコードに組み込むことにした場合、これを修正するのはかなり簡単です。

于 2010-02-11T08:18:47.410 に答える