2014-01-05 33 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>