2013-06-25 59 views
0

所以這應該是一個非常簡單的循環,但它不適合我。jQuery選擇器中的循環

for(var j = 1, len = $('#account .person').length; j <= len; j++) { 

    $('#a' + j).click(function(){ 
     $('#account' + j).css({left:'0%'}); 
    }); 

    }; 

我希望這會吐出....

$('#a1').click(function(){ 
     $('#account1').css({left:'0%'}); 
    }); 
$('#a2').click(function(){ 
     $('#account2').css({left:'0%'}); 
    }); 
/* (etc......) */ 
+4

查看全部()http://api.jquery.com/jQuery.each/ – vidario

+0

您的意思是?就像循環中的點擊事件一樣? – Ivan

+1

你面臨什麼錯誤? –

回答

1

如果你正在做的每一個元素相同的變化,每個#a__元素其實都是一樣的.person類元素,你可以簡單地做:

$("#account .person").css({left: '0%' });

無需遍歷。如果他們沒有關係,你需要循環,可使用.each()在評論中指出:

var j =1; 
$("#account .person").each(function(){ 
    j++; 
    $('#a' + j).data('num', j); 
    $('#a' + j).click(function(){ 
     $('#account' + $(this).data('num')).css({left:'0%'}); 
    }); 
}); 
+0

這個工作也是,但我不得不改變var j = 0,因爲它明顯跳過了第一個元素出於某種原因 – jaruesink

1

的功能

$('#a' + j).click(function(){ 
    $('#account' + j).css({left:'0%'}); 
}); 

創建closure。簡而言之,即使在塊完成之後,js解釋器仍然保持局部變量存在,但它不會複製它。因此,在點擊事件發生時,for區塊爲已完成,並且值j保留爲最終迭代的值。

爲了避免這種情況,確定在功能上j從你所擁有的,即元素要連接的處理程序,像這樣(警告:未測試):

$('#a' + j).click(function(){ 
    var correct_j = $(this).attr('id').replace('a',''); 
    $('#account' + correct_j).css({left:'0%'}); 
}); 
+0

@SetSailMedia Typo。感謝您的支持:) – J0HN

0

有人添加這個作爲答案,然後刪除它出於某種原因,但它適用於我。

$('[id^="a"]').click(function(){ 
$('#account'+this.id.match(/(\d+)$/)[0]).css({left:'0%'}); 
}); 

有什麼理由我不應該使用這種方法嗎?

+0

是的,使用正則表達式會使您的代碼非常難以理解。 RegEx在這裏不合適。它也會比'for'循環更糟糕 – Jonathan