Обратный вызов jQuery вызван слишком рано?

Вот код, который я использую:

function load(toLoad, area){
    $(area).html('<img src="images/ajax-loader.gif" alt="Loading" class="center" />');
    loadContent();
    function loadContent() {
        $(area).load(toLoad,'',sorter())
    };
    function sorter() {
        alert('s');
        $("#myTable").tablesorter({
            widgets: ['zebra']
        });
    };
    return false
};

Когда вызывается функция загрузки, предупреждение показывается, когда отображается загружаемое изображение, а не после завершения загрузки.

Что с этим не так?


person Hintswen    schedule 15.11.2009    source источник
comment
где ваш вызов load (toload, area)?   -  person Soufiane Hassou    schedule 16.11.2009
comment
Вас также могут заинтересовать ответы здесь... stackoverflow.com/questions/318630/   -  person Nosredna    schedule 16.11.2009
comment
@Sufiane Hassou, это было где-то еще в коде. Я не видел причин для его включения.   -  person Hintswen    schedule 16.11.2009


Ответы (3)


Я думаю, что синтаксис немного не подходит для этого.

вместо

function loadContent() {
    $(area).load(toLoad,'',sorter())
};

пытаться

function loadContent() {
    $(area).load(toLoad,'',sorter)
};
person Chris Gutierrez    schedule 15.11.2009
comment
Идеальный. Я не знаю, почему это работало со скобками в других местах, хотя... Может быть, я просто не заметил этого. - person Hintswen; 16.11.2009

Переместите определения функций за пределы функции загрузки. Это должно выглядеть так

function load(toLoad, area){
    $(area).html('<img src="images/ajax-loader.gif" alt="Loading" class="center" />');
    loadContent();
}

function loadContent() {
        $(area).load(toLoad,'',sorter())
}

function sorter() {
        alert('s');
        $("#myTable").tablesorter({
                widgets: ['zebra']
        });
    };
    return false
}
person stimms    schedule 15.11.2009
comment
ха! Я знал, что это выглядит неправильно, я на самом деле получил код откуда-то еще и не мог понять, почему у них он такой. - person Hintswen; 16.11.2009

Попробуйте следующее (оберните вызов sorter() в функцию загрузки в анонимную функцию)

function load(toLoad, area){
    $(area).html('<img src="images/ajax-loader.gif" alt="Loading" class="center" />');
    loadContent();
    function loadContent() {
        $(area).load(toLoad,'',function() {sorter()})
    };
    function sorter() {
        alert('s');
        $("#myTable").tablesorter({
                widgets: ['zebra']
        });
    };
    return false
};
person Aditya    schedule 15.11.2009