我在我的asp.net网站上使用嵌套转发器。使用这些转发器,我正在以表格形式显示产品列表(表放在外部转发器中)。在外部(顶层)中继器中,我有主要产品,在内部中继器中,我有一些与外部中继器中的产品相关的选项(如果有的话)。在下订单时,用户只允许选择2个与任何产品相关的选项。为了进行此验证,我使用的是具有以下客户端js函数的自定义验证器。
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 :(得分:0)
我想你想要nextUntil
。
http://api.jquery.com/nextUntil/
$('table.productslist tbody tr.productTextAlign').each(function () {
$(this).nextUntil("tr.productTextAlign").each(function () {
}
}
第二个循环将在当前productTextAlign
之后的每一行开始运行,并一直持续到找到另一个productTextAlign
。