2

バックグラウンド

Webアプリケーション内で引数を連結したリンクの代わりに、POSTフォームの送信を使用しているので、入力を制御できます。

残念ながら、これは、ユーザーが知っているクイックショートカットを使用して、コントロールクリックやミドルクリックなどの新しいウィンドウでリンクを開くことができないことを意味します。

問題

W3C DOMマウスイベント仕様に基づいて、jQueryを使用してマウス入力とさまざまなコードキーをキャプチャするための実行可能な方法があると思われるものがあります。

 $("span#clickspan").click( function(event) {

   buttonpress = event.button;
   ctrlpress = event.ctrlKey;

    $("#clickresult").empty();
    $("#clickresult").append("<p>Click!</p>");
    $("#clickresult").append("<p>Button # " + buttonpress + " pressed!</p>");
    if (ctrlpress) {
        $("#clickresult").append("<p>Control-click!</p>");
    }

    //form submission code would go here

    event.preventDefault();

    }
 );

この方法でコントロールクリックをキャプチャでき(Firefox 3およびIE7でテスト済み)、マウスボタン#0からの左クリックが正しく(?)報告されますが、何らかの理由で、このコードはまだ中クリックをキャプチャしていませんスパン、および右クリックでもコンテキストメニューがポップアップ表示されます。少なくともミドルクリックをキャプチャしたいと思います。

誰かがそこで助けることができますか?

「制御」とは

引数が連結されたGET送信/リンクの問題は、誰でもアドレスバーを編集して、何でも入力できることです。サーバー側の認証と検証についてはすでに心配しています。そういうわけで私はPOSTで働きたいのです。

意味のある情報だけをユーザーに表示する必要があります。内部データベースIDはそうではありません。ユーザーが意味のある方法でアプリケーションを操作できるようにする必要があります。アドレスバーを任意に編集することは、それらの1つではありません。

人々はいつもタイプミスをします。ただし、システムの観点からは、アドレスバーのタイプミスとアプリケーションロジックの欠陥に違いはなく、どちらが発生したかをユーザーに判断する責任を負わせたくはありません。

4

1 に答える 1

6

短い答え?できません。

長い答え? Javascriptマウスイベント。まだできません。

これは疑問を投げかけます:あなたはPOSTを使う必要がありますか、それとも単に使いたいですか?必要な唯一の理由は、クエリ文字列の長さです。したいこととして、あなたは「ユーザー入力の制御」について言及します。それは正確にはどういう意味ですか?

入力の検証をブラウザに頼ってはいけません。 便宜上そこで行うことができますが、サーバーは常に入力を検証する必要があります。

それとも、その理由は美的(つまり、より短く、「より良い」URL)ですか?

あなたはハイパーリンクである車輪を再発明しています。それは逆効果であり、実際のハイパーリンクと同じブラウザのサポートと互換性を得ることが決してないので、私はあなたがそうするためのかなりの正当な理由があることを確認しようとしています。さらに、ユーザーが期待するものが機能しないようにすることで、ユーザーを単に苛立たせる可能性があります。良くない。

于 2008-12-30T22:02:03.017 に答える