2011-09-23 121 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