Функция JQuery не определена

0
this.slideUpComm = function (){
    $("#Day-events-content p").addClass("hidden").slideUp("fast");
} 
this.showhideEvents = function() {
    $("#Day-events-content").on("click", ".eventsToggle", function() {
        var obj = $(this).next();
        if ($(obj).hasClass("hidden")) {
            slideUpComm();
            $(obj).removeClass("hidden").slideDown();
        } else {
            $(obj).addClass("hidden").slideUp();
        }
    });
}

Я хотел бы использовать функцию slideUpComm как функцию, которую я включаю в разные события, но консоль возвращает Uncaught ReferenceError: slideUpComm не определен. Как я должен передавать функцию для работы? Должен ли я использовать обратный вызов?

function dateObj() {
this.d = new Date();
this.day = this.d.getDate();
this.numDay = this.d.getDay();
this.month = parseInt(this.d.getMonth());
this.year = this.d.getFullYear();

this.slideUpComm = function (){

} 
this.showhideEvents = function() {

});
}
}

Мой объект выглядит выше.

  • 5
    Что this , и как вы вызываете функцию?
Теги:
callback
closures

3 ответа

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

Проблема заключается в том, что slideUpComm является членом объекта... поэтому вам нужно использовать ссылку на объект для вызова метода

//create a closure varaible to hold the reference to the instance
var self = this;
this.slideUpComm = function (){
    $("#Day-events-content p").addClass("hidden").slideUp("fast");
} 
this.showhideEvents = function() {
    $("#Day-events-content").on("click", ".eventsToggle", function() {
        var obj = $(this).next();
        if ($(obj).hasClass("hidden")) {
            //slideUpComm is a instance property so access it using the instance
            self.slideUpComm();
            $(obj).removeClass("hidden").slideDown();
        } else {
            $(obj).addClass("hidden").slideUp();
        }
    });
}
  • 0
    Спасибо за вашу помощь. Я хотел бы спросить, подходит ли этот способ для создания obj в JS? Я имею в виду лучшую практику.
  • 0
    @ Далли выглядит хорошо ...
1

slideUpComm - это функция dateObj, вы не можете напрямую вызывать функцию. Поэтому для вызова функции вам необходимо создать экземпляр функции/объекта

var a = new dataObj();

то вы можете вызвать функцию, используя

a.slideUpComm()
  • 0
    @ arun-p-johny ответ правильный, мой ответ был актуален, когда вызов функции не был добавлен к вопросу
0

Может ли это не сводиться к:

$("<object>").slideToggle();

?

  • 0
    Я думаю, что это будет короче и чисто.

Ещё вопросы

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