2014-09-23 62 views
3

對不起,在這個問題的措辭不好,但很難爲我解釋。我在頁面上使用了幾個bxsliders,有些被放置在隱藏的div中。不幸的是,除非滑塊被重新加載,否則圖像不會顯示在滑塊中,除非滑塊重新加載(請參見:bxSlider within show/hide divs)。所以我們可以說我發起滑塊在年初:如何創建一個字符串並使用以它命名的函數?

var slider_0=$("#slider_0 .bxslider").bxSlider({ 
    //bxslider options here 
}); 

var slider_4=$("#slider_4 .bxslider").bxSlider({ 
    //bxslider options here 
}); 

var slider_7=$("#slider_7 .bxslider").bxSlider({ 
    //bxslider options here 
}); 

滑塊不連續編號,但有一個導航,如果我點擊第七元素它會導致slider_7。當我打電話slider_7.reloadSlider();它會工作,但我不知道是哪個滑塊上的用戶點擊,哪個號碼有

$(this).index(); 

:所以我能得到點擊項目與指標。所以有可能用這樣的創建字符串來調用它:

slider_name='slider_'+$(this).index(); 
slider_name.reloadSlider(); 

當然不是。有沒有辦法做到這一點?

+0

這聽起來像您的滑塊HTML如下:'

',那麼你的init應該是'變種slider_4 = $( 「#slider_0」)bxSlider({} );''你可以用'$(「#slider_」+ $(this).index())來定位它們reloadSlider();' – 2014-09-23 14:28:17

回答

1

找到一個有效的解決方案:

eval("slider_" + $(this).index()).reloadSlider(); 
3

我會用字符串作爲鍵和函數創建一個字典作爲值。然後,您可以對O(1)的目標函數進行查找。

在一般情況下,你可以像這樣:

// set up your dictionary 
var dictionary = {}; 

// add your functions 
dictionary['methodName'] = function() {}; 

// call the functions 
dictionary['methodName'](); 

所以,你的榜樣,你可以這樣做:

dictionary['slider_7'] = slider_7.reloadSlider; 

dictionary['slider_'+$(this).index()](); 
+0

感謝您的提示,但它似乎不適用於我,因爲我設置了滑塊在PHP之前。所以我的代碼是:... $ slider''slider _'。$ u] ='slider _'。$。'。reloadSlider()'; }} //這是一個循環?>然後var dictionary = <?php echo json_encode($ sliderrs);但如果我這樣做,下面的錯誤發生:TypeError:dictionary [(「slider_」+ $(...)。index(...))]不是一個函數,可能是因爲它作爲字符串傳遞而不是對象 – user2718671 2014-09-24 07:17:27

+0

eval (「slider_」+ $(this).index())。reloadSlider();正在爲我工​​作 – user2718671 2014-09-24 08:11:27

+0

@ user2718671如果你需要一個php解決方案,那麼你的問題應該反映這一點。 – 2014-09-24 12:59:17

2

你可以與觸發它

window["slider_" + $(this).index()].reloadSlider() 

雖然,我不確定你的方法是否最好。我想我會用數組或對象與去(作爲鍵 - 值對)

+0

Thx。這很接近,但你不能以這種方式使用對象屬性。這是錯誤的語法。但是console.log(window [「slider_」+ $(this).index()])選擇了正確的對象。我發現了以下解決方案:eval(「slider_」+ $(this).index())。reloadSlider(); – user2718671 2014-09-24 08:07:52

1

試試這個:

slider_name='slider_'+$(this).index(); 
$("#" + slider_name + " .bx_slider").reloadSlider(); 
+0

Thx。這是我一開始嘗試的,但沒有奏效。這就是我發佈這個問題的原因;) – user2718671 2014-09-24 07:18:33

0
var slider_cache = [ 
    $("#slider_0 .bxslider").bxSlider(), 
    $("#slider_1 .bxslider").bxSlider(), 
    $("#slider_2 .bxslider").bxSlider() 
]; 

...

slider_cache[$(this).index()].reloadSlider(); 
1

它並不完全清楚在這裏你想要/正在嘗試做什麼。當用戶點擊頁面的特定部分時,您想要做的似乎是在特定滑塊上獲得編程式句柄。你不能通過eval()這個字符串來實現......這就是事件處理程序的用途。因此,創建一個單擊事件處理程序,並在該事件處理

$('#idOfWhatTheUserClicksOn').click(function(event) { 
    var slider = document.getElementById('#idOfRelatedSlider'); 
    $(slider).bxSlider(); 
    //if you need the current value of the slider you can get that too 
    var value = slider.value; 
}); 

你可以通過使用一個類而不是ID與不同的處理器實現用更少的LOC相同,但概念是相同的。

+0

Thx。但我不明白如何將這些代碼片段與我的示例連接起來。順便說一句,這不是我點擊的滑塊,它是一個導航,用滑塊顯示div,所以我猜這是行不通的。還是謝謝! – user2718671 2014-09-24 07:58:29

相關問題