生成多个jquery点击功能

时间:2013-09-26 17:43:20

标签: javascript jquery

客户端从服务器接收一些图像,然后基于创建缩略图图片。当用户点击这些缩略图时,它会做一些事情。但是,从服务器发送的图像数量可以是任意数量。所以现在我被卡住了,我不知道如何生成点击功能而不用像下面那样写出每个。有人能引导我走向正确的方向而不给我实际答案吗?

            $("#thumb-0").click(function(){
                index=0;
                switchHouse(index);
            });
            $("#thumb-1").click(function(){
                index=1;
                switchHouse(index);
            });
            $("#thumb-2").click(function(){
                index=2;
                switchHouse(index);
            });
                            ...
            $("#thumb-X").click(function(){
                index=arrayLength;
                switchHouse(index);
            });

我尝试了以下方法,但显然不起作用:

            for (var i=0; i<topHouse.length; i++){
                $("#thumb"+i).click(function(){
                    index=i;
                    switchHouse(index);
                });
            }

4 个答案:

答案 0 :(得分:4)

迭代时,每个函数都关闭变量i。在评估函数时,i的值已到达迭代的末尾。换句话说,当您点击缩略图时,i的值为topHouse.length,因此该函数实际上设置了index = topHouse.length

尝试使用闭包,以便每个处理程序都有自己的索引值:

for (var i=0; i<topHouse.length; i++){
    $("#thumb"+i).click((function(index) {
        return function() {
            switchHouse(index);
        }
    })(i));
}

答案 1 :(得分:3)

您可以使用Starts With

$( document ).ready(function() {

$("[id^='thumb']").click(function() {
    switchHouse( $(this).index() );  // or add $(this).index()+1

});

答案 2 :(得分:2)

这是一个解决方案。

将您的标记更改为:

<whatever class="thumbnail" data-index="1" />

你的处理程序:

$('.thumbnail').click(function() {
    switchHouse($(this).data('index'));
});

答案 3 :(得分:1)

使用唯一的拇指ID为每个图像添加一个类,以便您可以使用Jquery进行目标。然后这样做。

<img id="thumb-25" class="aThumb" src="...">

 $('.aThumb').click(function(e){
var getTheID = $(this).attr('id');
getTheID = getTheID.substring(6);

// switchHouse(getTheID);
  alert(getTheID);
});