Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建字符串并使用';是以它命名的吗?_Javascript_String_Function_Bxslider - Fatal编程技术网

Javascript 如何创建字符串并使用';是以它命名的吗?

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({

对不起,这个问题措辞不好,但很难为我解释。我在一个页面上使用了几个bxslider,其中一些放在隐藏的div中。不幸的是,在使父div可见后,图像不会显示在滑块中,除非重新加载滑块(请参见此处:)。让我们假设我在开始时启动滑块:

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();