Есть ли какая-то причина, по которой эта функция не запускается?

0

У меня есть набор объектов jQuery, вдавленных в массив "разделов". Я добавляю прослушиватель событий.on, и я консолью, чтобы проверить, вызвана ли функция, но это не так.

sections.push($('#section' + p_sectionIndex));
sections[sections.length-1].on('show', this.showSection);

this.showSection = function() {
    console.log("Section should show");
}

В другом месте кода я вызываю:

sections[showIndex].trigger('show');

Что я делаю не так?

  • 0
    Весь приведенный выше код находится в функции Раздела, которую я создаю как новый Раздел (... параметры ...). Так что мое лучшее предположение - это «указывает» на объект Section. Функция showSection является функцией объекта Section, поэтому она должна запускаться, верно? Я не получаю никаких ошибок. 'showIndex' - это просто сокращение, которое я использую здесь, чтобы продемонстрировать, как я запускаю функцию - но я проверил, что значение находится в пределах массива разделов. Еще раз, я не получаю никаких ошибок.
Теги:
this

1 ответ

4
Лучший ответ

Когда вы используете this.showSection оно не определено, поскольку выражение функции еще не выполнено. Таким образом, обработчик не зарегистрирован

this.showSection = function () {
    console.log("Section should show");
}

sections.push($('#section' + p_sectionIndex));
sections[sections.length - 1].on('show', this.showSection);

Демо: скрипка

Но если вы используете объявление функции, оно будет поднято

jQuery(function () {
    function handler1() {
        console.log('handler1')
    }

    console.log('handler1', handler1)
    console.log('handler2', handler2)
    $('button').on('click', handler1).on('click', handler2)

    function handler2() {
        console.log('handler2')
    }
})

Демо: скрипка

  • 0
    Пока я собираюсь придерживаться мнения, что это не работает, потому что функция была определена ПОСЛЕ добавления .on. Я не уверен, что полностью получил функциональную область. Конечно, функции могут обращаться к переменным вне себя. Первый раздел кода по ссылке «похоже» предлагает иное.

Ещё вопросы

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