Javascript 如何创建字符串并使用';是以它命名的吗?
对不起,这个问题措辞不好,但很难为我解释。我在一个页面上使用了几个bxslider,其中一些放在隐藏的div中。不幸的是,在使父div可见后,图像不会显示在滑块中,除非重新加载滑块(请参见此处:)。让我们假设我在开始时启动滑块:Javascript 如何创建字符串并使用';是以它命名的吗?,javascript,string,function,bxslider,Javascript,String,Function,Bxslider,对不起,这个问题措辞不好,但很难为我解释。我在一个页面上使用了几个bxslider,其中一些放在隐藏的div中。不幸的是,在使父div可见后,图像不会显示在滑块中,除非重新加载滑块(请参见此处:)。让我们假设我在开始时启动滑块: var slider_0=$("#slider_0 .bxslider").bxSlider({ //bxslider options here }); var slider_4=$("#slider_4 .bxslider").bxSlider({
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
});
滑块没有连续编号,但有一个导航,如果我单击第7个元素,它将指向滑块7。因此,我可以通过以下方式获取单击项目的索引:
$(this).index();
当我调用slider_7.reloadsloider()时代码>它可以工作,但我不知道用户单击了哪个滑块,它有哪个数字。那么,是否可以用这样一个创建的字符串来调用它:
slider_name='slider_'+$(this).index();
slider_name.reloadSlider();
当然不行。有办法吗?我会创建一个字典,字符串作为键,函数作为值。然后,可以对目标函数进行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()]();
你可以用
window["slider_" + $(this).index()].reloadSlider()
尽管如此,我不确定你的方法是否是最好的。我想我应该使用数组或对象(作为键值对)试试这个:
slider_name='slider_'+$(this).index();
$("#" + slider_name + " .bx_slider").reloadSlider();
这里并不完全清楚你想要/正在尝试做什么。当用户单击页面的特定部分时,您希望在特定滑块上获得编程句柄。您不能通过eval()
ing字符串来实现这一点……这就是事件处理程序的用途。因此,创建一个click事件处理程序,并在该事件处理程序中
$('#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实现同样的效果,但概念是相同的。找到了一个可行的解决方案:
eval("slider_" + $(this).index()).reloadSlider();
听起来您的slider html是这样的:
,那么您的init应该是var slider_4=$(“#slider_0”).bxSlider({})您可以使用$(“#slider_35;”+$(this.index()).reloadslaider()将它们作为目标代码>谢谢你的提示,但它似乎对我不起作用,因为我以前在php中设置过滑块。所以我的代码是:$滑块['slider.'$u]='slider.'$u..reloadSlider()';}}//这是一个循环?>然后var dictionary=eval(“slider”+$(this.index()).reloadslaider();他是为谁工作的me@user2718671如果你需要一个php解决方案,那么你的问题应该反映出这一点。我只是不想让它过于复杂,因为我认为会有一个简单的javascript解决方案,我很高兴eval()有一个;)谢谢。这是我一开始试过的,但没用。这就是我发布这个问题的原因;)谢谢。但我不知道如何将这些代码片段与我的示例连接起来。顺便说一句,我点击的不是滑块,而是一个用滑块显示div的导航,所以我想这无论如何都不会起作用。还是谢谢你!谢谢。这很接近,但不能以这种方式使用对象属性。这是错误的语法。但是console.log(window[“slider”+$(this.index()])选择了正确的对象。我找到了以下解决方案:eval(“slider”+$(this.index()).reloadslaider();
$('#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;
});
eval("slider_" + $(this).index()).reloadSlider();