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'}。而且我还想获​​取值并在更改后将其传递给函数,

4

1 回答 1

0

this滑块回调(change)内部的对象(它是#slider元素)thisuiSlider方法中的对象不同。

一种可能的解决方案是使用闭包变量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);
        }
    });                                             
}

为什么?可能你可以更多地了解这个闭包变量

于 2013-10-21T08:16:52.550 回答