2

私はajax search.ajax関数がonblurイベントで呼び出されることに取り組んでいます.belowはサンプルコードです。

function search_ajax(sh_val,sh_act)
{
    ....some search code.....
    window.location.hash = sh_val+'@'+sh_act;

}

ブラウザーの戻るボタンまたは進むボタンをクリックしたときに、URL のハッシュ値を使用して検索を復元するための別の関数を作成しました。これは、戻るボタンと進むボタンでうまく機能します。

$(window).bind( 'hashchange', function(e) {
var page=location.hash.slice(1)
if (page!="" && page!="p")
    {
        search_ajax(page,'catsh');
    }
    return false;
 });

しかし、検索時に問題に直面しています ajax検索機能が2回呼び出されます。$(window).bind( 'hashchange') は、検索時にも呼び出されます。ブラウザの前後ボタンまたはその他のソリューションに対してのみ上記の関数を呼び出す方法はありますか?

どうすればこの問題を解決できますか?

私はどんな種類の助けにも感謝します..

4

2 に答える 2

2

セマフォを使用できます:

var searching = false;

function search_ajax(sh_val, sh_act) {
    searching = true;
    ....some search code.....
    window.location.hash = sh_val + '@' + sh_act;
    searching = false;
}

$(window).bind('hashchange', function (e) {
    if (searching) 
        return false;
    var page = location.hash.slice(1);
    if (page != "" && page != "p") {
        search_ajax(page, 'catsh');
    }
    return false;
});
于 2013-08-08T12:37:36.887 に答える
2

よくわからないかもしれませんが、なぜhashchange関数をウィンドウにバインドしたのですか??? 意味がありません。自分のアプリにも同様の検索機能があります。それほど複雑ではありません。私の検索機能は(たとえば)あなたのものと同じです:

function search_ajax(sh_val,sh_act)
{
    ....some search code.....
    window.location.hash = sh_val+'@'+sh_act;
}

もう 1 つは、ページの読み込みごとに 1 回実行されます。

(function() {
var page=location.hash.slice(1)
if (page!="" && page!="p")
    {
        search_ajax(page,'catsh');
    }
    return false;
})();

したがって、検索ボタンをクリックすると、検索機能が呼び出されます。ハッシュが変更されます。ブラウザーの履歴に 1 つのステップが追加されます。

次に、別の検索、歴史の別のステップが追加されます。

次に戻るボタン。ページが再度読み込まれるため、匿名機能が実行されます。ハッシュが検出されたので、検索が実行されます。ハッシュは変更されますが、ハッシュは以前と同じであるため、リンクも同じであるため、履歴に重複ステップは追加されません。

于 2013-08-08T12:29:27.243 に答える