2011-09-23 119 views
0

我使用此代碼來遍歷每個「.accessoryrow」,然後選擇「對話框」+計數器和「.see-details」+計數器。所以第一次循環時,它會選擇dialog1類和see-details1類;第二次對話2,see-details2等等。我想我沒有正確地向選擇器添加計數器。請糾正我。謝謝jQuery循環使用每個類() - 問題

CODE:

var counter = 1; 
     $(function() { 
     $(".accessoryrow").each(function() { 
      $(".dialog" + counter).dialog({ 
       autoOpen: false, 
       show: "blind", 
       hide: "fade" 
      }); 

      $(".see-details" + counter).click(function() { 
       $(".dialog" + counter).dialog("open"); 
       return false; 
      }); 
      counter++; 
     }); 
+0

你是否收到任何javascript錯誤? – Jack

+0

不,看起來它實際上選擇正確,因爲如果我不選擇,那麼我在頁面上有額外的文本。只是它沒有顯示對話框的詳細信息,請點擊 –

+0

在頁面加載後,「.see-details」是否添加到了DOM中? – Jack

回答

1

問題是$(".dialog" + counter).dialog("open");行在鏈接被單擊之前沒有被評估。因此它使用counter的值,它是當時的,然後是。更好的方法是完全取出計數器,並使用jQuery選擇器選擇正確的.dialog。

沒有HTML,我不能說這應該是什麼樣子,但你會想點擊的功能看起來像沿着

$(".see-details").click(function() { 
     $(this).sibling(".dialog").dialog("open"); 
     return false; 
    }); 

當然線的東西,即假定.dialog元素實際上是.see-details的一個兄弟。如果不是,你需要更多地遍歷樹。

0

試試這個(未經測試):

$(function() { 
    $(".accessoryrow").each(function(index) { 
     $(".dialog" + (index + 1)).dialog({ 
      autoOpen: false, 
      show: "blind", 
      hide: "fade" 
     }); 

     $(".see-details" + (index + 1)).click(function() { 
      $(".dialog" + (index + 1)).dialog("open"); 
      return false; 
     }); 
    }); 

指數經過循環次數的函數。它從0開始,我認爲你需要它從1開始,所以我在每個地方添加了1。

+0

我很確定索引不會被內部函數看到。即使是這樣,內部函數只會在點擊時進行評估,所以索引將是錯誤的值。 – Bobson

+0

我意識到這個問題得到了回答,但索引對內部函數是可見的。 (document.ready): '$('。someClass')。each(function(index){(this).click(function(){alert(index); }); });'' 在這種情況下,點擊時出現的警報顯示該元素的索引值,0 - N. – Robert

+0

嗯。我從來沒有能夠得到這個工作。下次我需要時,我將不得不再看一次。很明顯,我一直在做*錯*。 – Bobson