2014-01-05 30 views
0

我正在构建一个jQuery滑块,并且我遇到了一个全局变量的麻烦。我不能在本地使用它作为本地。我在一个页面上使用多个滑块,因此这个全局变量EndPosition应该与滑块不同。变量名中的jquery id

$.fn.slider = function(id) {   
    var SliderID = id; 
    EndPosition = (VisibleWidth - TotalWidth); //End position for sliding 

有没有办法通过一个ID变量名称,像终端位置+ id,这样我就可以使用它一样,在代码的其他部分,例如这里

if (NewPosition <= EndPosition+id){ 
       RightNav.addClass('disabled');  
      } 
+0

谢谢大家对您的回答,我现在将检查他们。 – user2406735

回答

0

右键,你可以用:

window["EndPosition" + id] 

所以你必须:

if (NewPosition <= window["EndPosition" + id]) ... 

window是所有全球变量的容器。

干杯

+1

为什么你认为代码运行在全局空间而不在某个范围内? – zerkms

2

我建议使用对象和括号标记:

var positions = { 
    'endPosition1': 'foo', 
    'endPosition2': 'bar' 
} 

var value = positions['endPosition' + id]; 

如果你的变量是全局的,你可以访问他们像其他属性,但此时这些都是的属性全球window对象:

window['EndPosition' + id]; 

如果id s为数字,你可以还你一个简单的数组:

var positions = ['foo', 'bar']; 
positions[id]; 
positions[id - 1]; // ? 
2

这将是清洁剂使用对象包含您的结束位置,而不是使用多个全局变量:

var EndPositions = {}; 

// ... 

EndPositions['id_one'] = 10; 
EndPositions['id_two'] = 20; 

// ... 

if (NewPosition <= EndPositions[id]){ 
    RightNav.addClass('disabled');  
} 
-1

是的,你可以使用JSON数组,你可以做这样的事情:

var sliderObject = [ 
{ "EndPosition":VisibleWidth - TotalWidth }, 
{ "ID": id }, 
]; 

然后只检查::

NewPosition <= sliderObject [EndPosition][0] 

看看:http://www.w3schools.com/json/json_syntax.asp

1

一个更清洁的方式(IMO):

$.fn.slider = function(...) { 
    // ... 
    $(this).data('end-position', visibleWidth - totalWidth); 
    // ... 
}; 

所以,如果你没有

$('.slider').slider(...); 

您可以访问到end-position变量这样

$('.slider').data('end-position'); 

编辑:

如果需要通过ID查找滑块的结束位置,你可以做到这一点是这样的:

<div class="slider" data-id="1"></div> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.slider').slider(...); 

    ... = $('.slider[data-id=1]').data('end-position'); 
}); 
</script>