2014-09-23 60 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

相关问题