2012-08-09 112 views
2

我有以下的javascript的Javascript重复/循环需要帮助

$('.goto1').click(function() { 
    $('#mttslider').cycle(0); 
    return false; 
}); 

我想是因为它重复像这样:

$('.goto1').click(function() { 
    $('#mttslider').cycle(0); 
    return false; 
}); 

$('.goto2').click(function() { 
    $('#mttslider').cycle(1); 
    return false; 
}); 

$('.goto3').click(function() { 
     $('#mttslider').cycle(2); 
     return false; 
    }); 

etc... 

这是这样,我可以让每个触发器 - .goto(n) - 触发循环功能。

任何帮助将不胜感激!

+0

你能显示你的html吗? – Undefined 2012-08-09 16:47:43

+1

给你所有的'goto#'项目另一个通用的'goto'类。 – zzzzBov 2012-08-09 16:51:21

回答

3
$('[class^=goto]').click(function() { 
    var index = parseInt(this.className.replace('goto',''), 10); 
    $('#mttslider').cycle(index); 
    return false; 
}); 

这将工作,如果你元素没有class除了goto1, goto2

+0

不错的工作。正在做其他事情,但这样做会更好。 – Wesley 2012-08-09 16:56:37

+0

@韦斯利谢谢。 – thecodeparadox 2012-08-09 16:57:36

+0

完美!谢谢! – Adam 2012-08-10 08:35:20

0
var listener = function(index){ 
var selector = '.goto'+ index; 
$(selector).click(function() { 
    $('#mttslider').cycle(index-1); 
    return false; 
}); 
} 

现在,您可以拨打听众功能从我到n注册新的事件监听器,并调用周期具有可变索引值的函数

例如:

listener(3); 
listener(5); 
0

以及假设你知道的n的范围内开始与 我可能会做这样的事情:

var slider = $('#mtslider'); 

for(var i=1; i<=n; i++) 
{ 
    (function(j){ 
     $('.goto' + j).on('click', function(){ 
      slider.cycle(j) 
     }); 
    })(i); 
} 

因为$('#mtslider')被引用一个ID,我假设它不会改变,所以你不必多次运行jquery选择器。除此之外,只需遍历[1,n]范围内的每个int并使用闭包创建点击处理程序。如果您不使用封闭,则在点击该项目后,i的值很可能会有所不同。

如果n未知,您可以使用一个选择器,类似于以前的答案,但没有goto(n)是第一类的警告。

$('class~="goto"]').on('click', function(){ 
    var i = /goto(\d+)/.exec(this.className)[1]; 
    slider.cycle(i); 
});