JQuery проверить, onload или onhashchange - PullRequest
0 голосов
/ 15 мая 2018

Итак, я пытаюсь вызвать функцию, когда страница загружается, но эта функция должна перезагрузиться, когда есть хэш-обмен.

Прямо сейчас я делаю это так:

var HabJax = HabJax || function() {
    "use strict";

   if(window.location.hash) {
        HabJax.handle_ajax();
    }

    window.addEventListener("hashchange", function(){
        HabJax.handle_ajax();
    }, false);

    return this;
};

window.onload = function(){
    this.HabJax = new HabJax();
}

HabJax.prototype = {

    page: null,
    self: this,
    hotelBase: 'http://localhost/Ajax/',

    handle_ajax: function()
    {
        var query_string = window.location.hash;
        query_string = query_string.substr(1);
        query_string = query_string.substr(1);

        if(query_string != 'index' && query_string != '0' && query_string != '' && query_string != null) {
            $.ajax({
                type: "POST",
                url: this.hotelBase + query_string,
                success: function(data) {
                    $("#contentInner").slideUp('fast', function() {
                        $("#content").html(data);
                        $("#contentInner").slideDown('slow');
                    });

                    HabJax.initialize();
                }
            });
        } else {
            window.location.hash = '!1';
        }
    },

    initialize: function()
    {
        console.log('HabJax: Initialized (Page: ' + this.getPage() + ')');

        this.page = this.getPage();
        this.executePageFunctionalities(this.page);

        window.onhashchange = function() {
            HabJax.page = HabJax.getPage();
            HabJax.executePageFunctionalities(HabJax.page);
        }

        return true;
    },

    getPage: function()
    {
        var page = location.href,
            pageName,
            action;

        if (page.indexOf('&') != -1)
        {
            pageName = page.substring(page.lastIndexOf('/') + 1, page.indexOf('&'));
        }
        else if(page.indexOf('#') != -1)
        {
            pageName = page.substring(page.lastIndexOf('/') + 1, page.indexOf('#'));
            pageName = pageName.substring(0, pageName.length - 1).slice(2);
        }
        else
        {
            pageName = page.substring(page.lastIndexOf('/') + 1);
        }

        return (pageName == '' ? '0' : pageName);
    },

    executePageFunctionalities: function(page)
    {
        switch (page)
        {
            case null:
            case '0':
                console.log('HabJax Index: Initialized');
                break;
            case '1':
                console.log('HabJax Me: Initialized');
                this.Me.init();
                break;
            case '2':
                console.log('HabJax Test: Initialized');
                break;
        }
    },

Но проблема здесь в том, что функция handle_ajax () дважды вызывается при замене ...

Изображение: Screenshot

Как мне решить эту проблему?

РЕДАКТИРОВАТЬ Нашли решение, ответ в комментариях.

1 Ответ

0 голосов
/ 15 мая 2018

EDIT:

убрал if (window.location.hash) в строке 4;

удалил следующий код, начиная со строки 54:

window.onhashchange = function() {
    HabJax.page = HabJax.getPage();
    HabJax.executePageFunctionalities(HabJax.page);
}

Кажется, это решает проблему ... Извините за ненужный пост ...

...