2

列名をクリックしてソートしようとしたときにユーザーが Ctrl キーを押したかどうかに基づいて、ASP.Net の gridview コントロールにマルチソートを実行させようとしています。問題は、Firefox を使用しているときに、Ctrl キーを押しながら列名をクリックすると、ブラウザが「javascript:__doPostBack('ctl00$ContentPla...」リンクを新しいタブで開こうとすることです。IE と Chrome の両方リンクが実際のリンクでない限り、これを行わないでください。

Firefox がリンクを新しいタブで開くのを防ぎ、それでもページが正常にポストバックされるようにする方法はありますか?

ありがとう。

4

1 に答える 1

1

document.onKeyDown を使用して、Ctrl キーが押されたイベントをキャプチャする必要があります。

イベント ハンドラーで、次のように 'Ctrl' (キー コード 17) が押されたかどうかを確認します。

function document_keyDown(e) {
    var KeyID = (window.event) ? event.keyCode : e.keyCode;
        if (KeyID == 17) { 
            ctrlDown = true;
        }
}

ここでは、「ctrlDown」変数を true に設定しています。

onKeyUp イベントの場合は、正反対のことができます。

function document_keyUp(e) {
    var KeyID = (window.event) ? event.keyCode : e.keyCode;
    if (KeyID == 17) { 
       ctrlDown = false;
    }
}

次に、列要素のクリック イベントで、Ctrl がクリックされたかどうかを確認できます。

function columnElement_click() {
    if (ctrlDown != undefined && ctrlDown == true)
        alert("Ctrl + Click Received");
    return false;
}

列クリック ハンドラが false を返すことを確認してください。それ以外の場合、ブラウザはコードを実行しますが、リンクの「href」属性のアドレスに移動します。

お役に立てれば。

(参照: http://www.geekpedia.com/tutorial138_Get-key-press-event-using-JavaScript.html )

于 2010-01-12T02:52:36.250 に答える