2

これが私が持っているものです:

  • 単一のHTMLページ(それを呼び出すmyapp.req)で実行され、コンテンツがAJAXを介して送受信されるWebアプリケーション
  • アプリケーションは、などのリンクを使用して外部から入力できmyapp.req?id=123、アプリケーションはID123のアイテムを含むタブを開きます。
  • ページのコンテンツは主にユーザーのコンテンツであり、多くの場合、myapp.req?id=123
  • 問題は、リンクをクリックしmyapp.req?id=123てブラウザをリロードし、ユーザーがロードしたコンテンツまたは状態を削除することです。

私が欲しいのは、宛先がmyapp.req?id=123であるリンククリックをキャッチできるようにすることです。ページをリロードする代わりに、アイテム123のタブを開くだけで、現在ロードされているものはすべてそのままにしておきます。ただし、リンクが外部Webサイトへのリンクである場合は、明らかにブラウザをそのままにしておきます。

だから私の質問は本当に:リンククリックを処理したいかどうかをチェックするグローバルリンクハンドラーを持てますか?もしそうなら、Javascriptを実行して離れないでください?

すべてを見つけて<a>リスナーを追加できることは理解していますが、ソリューションでリスナーを1回設定するだけで済み、ページに新しいコンテンツが読み込まれるたびにリンクハンドラーを追加する必要がないことを願っています。コンテンツはさまざまな方法でロードできるため、それらすべての場所にコードを追加するのは面倒です。

それは理にかなっていますか?

4

3 に答える 3

2

jQueryのライブはあなたが必要とするものです:

$('a').live("click", function () {
    var myID = $(this).attr('href').match(/id=([a-zA-Z0-9_-]*)\&?/)[1];
    if (myID) {
        //run code here
        alert(myID);
        return false;
    }
});

これで、これが呼び出された後に追加されたかどうかに関係なく、すべてのリンクにこのクリックハンドラーが含まれるようになります。

于 2011-08-18T19:19:27.733 に答える
1

できますよ。本体にクリックハンドラーを追加します。したがって、すべてのクリックをキャッチします。次に、イベントのターゲットまたはその親の1つが特定のhrefとのリンクであるかどうかを確認する必要があります。この場合、イベントを停止してタブを開きます。

于 2011-08-18T19:39:49.400 に答える
0

.live代わりに使用するように更新.click

jQueryを使用する場合は、「ライブ」クリックイベントハンドラーをa href一度に追加できます。

<body>
    <a href="app.req?id=123&test=432">click here</a>
    <br/>
    <a href="http://whatever.com">whatever</a>
</body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript"> 
$('a').live('click',function() {
    var myID = $(this).attr('href').match(/id=([a-zA-Z0-9_-]*)\&?/)[1];
    if (myID) {
        //run code here
        alert(myID);
        return false;
    }
});
</script>

これにより、hrefのクエリ文字列からIDが抽出され、必要な処理を実行できるようになります。

于 2011-08-18T19:05:50.267 に答える