如何在事件后将值传递给函数

时间:2013-10-21 08:10:26

标签: jquery oop jquery-plugins

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

1 个答案:

答案 0 :(得分: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);
        }
    });                                             
}

为什么呢?您可以了解有关thisclosure variables

的更多信息