как я могу передать значение функции после события

0
            uiSlider: function(){                                   
                var arrLength = (this.cDat).length - 1,                 
                    value = this.cDat,                      
                    pieTitle = this.cDet,
                    config = this.anyChartConfig(); 

                    console.log( this.anyChartConfig(2) );              

                $( "#slider" ).slider({
                  range: "min",
                  min: 0,
                  max: arrLength,
                  step: 1,
                  change: function ( event, ui ) {                              
                    console.log( this.anyChartConfig(ui.value) );
                  }
                })
                .each(function() {
                  var opt = $(this).data().uiSlider.options;                      
                  var vals = opt.max - opt.min;                   
                  for (var i = 0; i <= vals; i++) {                     
                    var el = $('<label>'+ ( value[i]["title"] ) +'</label>').css('left',(i/vals*100)+'%');                      
                    $( "#slider" ).append(el);
                  }
                });                                             
            },

В первом console.log() он отображается правильно, но он второй console.log() он дает мне ошибку {Object не поддерживает свойство или метод anyChartConfig '}. А также я хочу получить значение и передать его функции после изменения,

Теги:
oop
jquery-plugins

1 ответ

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

this внутри ползуна обратного вызова (change) является другим объектом (это #slider элемент), чем то, что было this в uiSlider методе.

Возможным решением является использование переменной замыкания self как показано ниже

uiSlider: function(){                                   
    var arrLength = (this.cDat).length - 1,                 
        value = this.cDat,                      
        pieTitle = this.cDet,
        config = this.anyChartConfig(), self = this; 

    console.log( this.anyChartConfig(2) );              

    $( "#slider" ).slider({
        range: "min",
        min: 0,
        max: arrLength,
        step: 1,
        change: function ( event, ui ) {                              
            console.log( self.anyChartConfig(ui.value) );
        }
    })
    .each(function() {
        var opt = $(this).data().uiSlider.options;                      
        var vals = opt.max - opt.min;                   
        for (var i = 0; i <= vals; i++) {                     
            var el = $('<label>'+ ( value[i]["title"] ) +'</label>').css('left',(i/vals*100)+'%');                      
            $( "#slider" ).append(el);
        }
    });                                             
}

Зачем? Вероятно, вы можете больше узнать об этом и о переменных закрытия

  • 0
    Тем не менее я получил ту же ошибку :(
  • 0
    наконец-то работает! :) Можете ли вы объяснить это мне, почему мне нужно объявить переменную self = this?

Ещё вопросы

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