0

前の URL によって提供される情報を使用して、オプション リンクのリスト内のオプションを正しく選択する次のコードがありますが、コードの実行時に正しいリンクが視覚的に選択されますが、リンクがアクティブに選択されていないかのように結果が表示されます。 .

$(document).ready(function () {
    $("a.optionLink:contains('"+ (document.referrer.split('/').pop()) +"')").click();
});

実行コードまたはトリガー コードを追加する必要がありますか? 前もって感謝します。

4

1 に答える 1

0

関連するコードには、いくつかの点で問題があります。

まず、例外処理コード (try/catch) が関数の外にあり、これは良い考えではありません。

次に、ページ内のすべてのリンクをスキャンして、空の可能性がある式を探します (この場合、何百ものリンクがトリガーされる可能性があります)。

最後になりましたが、リファラーにはリンクとして正確なフレーズが含まれていない場合があります。たとえば、(これはエラーを示しますが、これは別の問題です)にEngland & Wales関連しています。このハックが不要になるように、クエリ文字列またはフラグメントを使用して検索ページへのリンクを動的に生成することを検討します。http://www.legalcounseldirect.com/England&WalesResource not found

とはいえ、ほとんどの場合うまくいく可能性のある解決策は次のとおりです。

また:

$(document).ready(function () {   
    setTimeout(function(){
        try{
            var lastSegment = document.referrer.split('/').pop();
            if(lastSegment != "") {
                var matches = $("#idFilterColumns a.optionLink:contains('"+ lastSegment  +"')");
                if(matches.length === 1) {
                    matches.click();
                }
            }
        }catch(e){} 
    },100);
});

多分:

$(window).on('load', function(){
    try{
        var lastSegment = document.referrer.split('/').pop();
        if(lastSegment != "") {
            var matches = $("#idFilterColumns a.optionLink:contains('"+ lastSegment  +"')");
            if(matches.length === 1) {
                matches.click();
            }
        }
    }catch(e){}
});

2 つの異なるイベントによってトリガーされます。

  • 1 つ目は、ドキュメントの準備ができたときにトリガーされます。これはおそらく、フォームの残りの機能が生成されているときです。関連するすべてのリスナーの準備が整った (明らかに準備ができていない) 後にスクリプトが実行されることを確認する方法がないため、clickイベントのトリガーを延期するためにタイムアウトが使用されます。

  • 2 番目のコード セグメントは、後のイベントであるウィンドウの読み込みによってトリガーされます。すべてのイベントの添付が既に行われていることが予想される (ただし、テストされていない) ため、タイムアウトを設定しなくても機能する可能性があります。

一度に 1 つずつ試すことができます。両方を使用する必要はありません。

于 2013-08-11T23:15:39.937 に答える