Javascript - передача параметра в функцию, которая вызывает другую функцию

0

Хорошо, мой заголовок немного запутан, но в основном, у меня есть функция, и после того, как эта функция завершена, она должна выполнить указанные шаги. Вот мой javascript:

createSideTable(showThis, function() {
    $('#' + showThis + 'Screen').slideDown('slow');
});

Я хочу, чтобы функция createSideTable выполняла весь код перед шагом

$('#' + showThis + 'Screen').slideDown('slow');

может выполняться. CreateSideTable более или менее просто делает боковой стол медленно затухающим. Функцию можно увидеть в конце этого сообщения. Обычно, когда у меня есть функция, которую я хочу выполнить все ее шаги, а затем выполнить другие заданные шаги, я бы сделал это так

createSideTable(function() {
    $('#' + showThis + 'Screen').slideDown('slow');
});

и он работает, однако для функции createSideTable нужен параметр (для него необходим параметр showThis). Поэтому, когда я попробовал

createSideTable(showThis, function() {
    $('#' + showThis + 'Screen').slideDown('slow');
});

однако он создал sideTable, однако этот шаг

$('#' + showThis + 'Screen').slideDown('slow');

не выполнялся после создания sideTable. Как так? Это моя функция createSideTable.

function createSideTable(test) {
    var key = test.substr(test.length -1); //index of Heading
    for (var i=0; i<window['headings' + key].length; i++) {
        if (i == 0) {
            $('#row' + i).addClass('subHeadingClicked');
        }

        $('#row' + i).text('').removeClass('column1invisible');
        $('#row' + i).append(window['headings' + key][i]);
    }
    $('#sideTable').fadeIn(1500);
}
  • 2
    Ваша функция createSideTable вызывает обратный вызов? Можете ли вы опубликовать код этой функции?
  • 0
    @JasonP Хм Я не делаю обратного вызова ... Я поднял функцию createSideTable. Как мне перезвонить? Должен ли я просто добавить 'callback ();' в конце моей функции createSideTable или мне нужно передать другой параметр под названием «обратный вызов» в функцию createSideTable?
Теги:
settimeout
function

1 ответ

3

Добавьте параметр обратного вызова, и если он существует, вызовите его в конце:

function createSideTable(test, callback) {
    var key = test.substr(test.length -1); //index of Heading
    for (var i=0; i<window['headings' + key].length; i++) {
        if (i == 0) {
            $('#row' + i).addClass('subHeadingClicked');
        }

        $('#row' + i).text('').removeClass('column1invisible');
        $('#row' + i).append(window['headings' + key][i]);
    }
    $('#sideTable').fadeIn(1500);

    if (callback) callback();
}

И вы должны иметь возможность называть это следующим образом:

createSideTable(showThis, function() {
    $('#' + showThis + 'Screen').slideDown('slow');
});

Редактировать -

В первом примере показано, как работает обратный вызов. Вы можете выполнить обратный вызов там, где хотите... например, если вы хотите, чтобы он выполнялся после fadeIn(), вы могли бы сделать это:

function createSideTable(test, callback) {
    var key = test.substr(test.length -1); //index of Heading
    for (var i=0; i<window['headings' + key].length; i++) {
        if (i == 0) {
            $('#row' + i).addClass('subHeadingClicked');
        }

        $('#row' + i).text('').removeClass('column1invisible');
        $('#row' + i).append(window['headings' + key][i]);
    }
    $('#sideTable').fadeIn(1500, function() {
        if (callback) callback();
    });
}
  • 0
    Зачем использовать обратный вызов для этого? Возможно, имеет смысл передать обратный вызов в метод fadeIn .
  • 0
    @ Берги Вы правы, все было синхронно, что не имеет смысла. Мое редактирование может иметь больше смысла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню