2011-08-04 24 views
0

我在我的asp.net网站中使用嵌套中继器。使用这些中继器,我显示的产品列表以表格的形式(表放在外部中继器)。在外部(顶层)中继器中,我有主要产品,在内部中继器中,我有一些与外部中继器中的产品相关的选项(如果有的话)。在放置订购用户时,只允许选择2个与任何产品相关的选项。为了做这个验证,我使用了一个自定义的验证器和下面的客户端js函数。问题获取在HTML表中使用jQuery的特定行的直接几行

function CountChosenAdditionalOptions(source, arguments) { 

     $('table.productslist tbody tr.productTextAlign').each(function() { 
      var count = 0; 
      $('table. productslist tbody tr.additionalOptions').each(function() { 
       var chooseAdditionalOptionsCheckBoxtd = $(this).children("td.chooseOptionCheckBox"); 
       var additionalOptionChosen = $(chooseAdditionalOptionsCheckBoxtd).children("input[type=checkbox]")[0].checked; 
       if (additionalOptionChosen) { 
        count = count + 1; 
       } 
      }); 
      if (count > 2) { 
       arguments.IsValid = false; 
       return false; 
      } 
     });  
    } 

并经中继器呈现的示例HTML是如下

<table class= “productslist”> 
<tbody> 
<tr>....</tr> 
<tr>....</tr> 
<tr class=”productTextAlign”> 
..... 
..... 
</tr> 
<tr class=”additionalOptions”>.....</tr> 
<tr class=”additionalOptions”>.....</tr> 

<tr class=”additionalOptions”>.....</tr> 

<tr class=”additionalOptions”>.....</tr> 

<tr class=”additionalOptions”>.....</tr> 
<tr>...</tr> 

<tr class=”productTextAlign”></tr> 

<tr class=”additionalOptions”>.....</tr> 

<tr class=”additionalOptions”>.....</tr> 

<tr class=”additionalOptions”>.....</tr> 

<tr class=”additionalOptions”>.....</tr> 
</tbody> 
</table> 

验证背后的想法是通过外中继器以及用于它的每个项目检查在选择的选项的数量来迭代内部中继器。但是由于中继器简单地呈现为表格,对于每个产品行,js的功能如上所述,它试图找到附加选项行并递增计数,而不管附加选项行是否与该特定产品相关联,或者不。

是否有人请帮助更新js函数以识别与特定产品相关的选项并增加指示所选选项数量的计数?

更新:

function CountChosenAdditionalOptions(source, arguments) { 

     $('table.productslist tbody tr.productTextAlign').each(function() { 
      var count = 0; $(this).nextUntil("tr.productTextAlign").each(function() { 
       var chooseAdditionalOptionsCheckBoxtd = $(this).children("td.chooseOptionCheckBox"); 
       var additionalOptionChosen = $(chooseAdditionalOptionsCheckBoxtd).children("input[type=checkbox]")[0].checked; 
       if (additionalOptionChosen) { 
        count = count + 1; 
       } 
      }); 
      if (count > 2) { 
       arguments.IsValid = false; 
       return false; 
      } 
     });  
    } 

回答

0

我想你想nextUntil

http://api.jquery.com/nextUntil/

$('table.productslist tbody tr.productTextAlign').each(function() { 

    $(this).nextUntil("tr.productTextAlign").each(function() { 

    } 
} 

第二届环将当前productTextAlign后,每行开始继续,直到找到另一productTextAlign运行。

+0

非常感谢您的快速回复。我尝试使用nextUntil,它工作正常。但现在的问题是跳出。每个嵌套循环立即计数> 2.使用'返回false'跳出循环但是我调用js函数的服务器端控件(自定义验证器)不能识别count> 2。我尝试使用'break'而不是'return false',但是我看到'不能使用break out'循环'warning.Could你能帮我吗?我不确定是否有任何其他方式跳出在jQuery中循环,我认为这是在javascript中而不是jQuery的实现这很复杂 – kranthi

+0

我发布了最新的js函数作为我上面原始问题的更新。 – kranthi

+0

在每个内部返回false将打破循环,并且不会从整体函数中返回false。如果你想这样做,你需要在循环中设置一个标志,然后检查每个标志的外部标志。 –

相关问题