我有一个有15行的表单。每行都有一个编号为1 - 15(row_id)的ID,每行包含一个选择字段和许多文本字段。
我要做的是,如果row_id 6或以上的select选项设置为0以外的任何值,则禁用row_id 5,如果row_id 11或更高的select选项设置为0以外的任何选项,则禁用row_id 10。
例如:
Any select > 0 on rows 6 - 15 will disable row 5
AND
Any select > 0 on rows 11 -15 will disable row 10
因此在第12行选择2会禁用第5行和第5行。 10
我创建了一个显示表格以及如何设置row_ids的小提琴,但我现在已经知道如何做到这一点.. http://jsfiddle.net/v0kvwfje/2/
有什么建议吗?
编辑:来自小提琴的代码:
$("select").change(function() {
id = $(this).attr("row_id");
val = $(this).val();
});
答案 0 :(得分:3)
你可以这样做:
$("select").change(function() {
var disabled = false;
var selects = $("select");
for (var i=selects.length - 1; i >= 4; i--) {
if (i % 5 == 4) $(selects[i]).prop("disabled", disabled);
disabled |= selects[i].value;
}
});
此代码将从下到上遍历SELECT
个元素。每当它找到非零条目时,它会将禁用的变量设置为true
;在循环的其余部分,它永远不会再次获得false
。
遇到特殊行10和5(基于零的编号中的4和9)时,禁用值用于设置相应元素的disabled
属性。 / p>
如果您决定使用另外5行扩展列表,并希望应用相同的原则来启用/禁用第15个SELECT
元素,则不必更改上述代码。无论列表有多长,它都会为每五个SELECT
元素完成工作。
答案 1 :(得分:0)
任何选择>第6行 - 第15行将禁用第5行
使用您已经设置的变量将其转换为代码:
if
val > 0
id >= 6
(因为有15行,无需明确检查)$("[row_id=5]").attr("disabled", true)
即:
if (val>0 && id>=6) $("[row_id=5]").attr("disabled", true)
if (val>0 && id>=11) $("[row_id=10]").attr("disabled", true)
如果你想要例如6-10而不是6-end,那么添加:(val>0 and id>=6 && id<=10)
或者在选择之前禁用所有内容的更通用的情况:
for(var i=1;i<id;++i)
$("[row_id='" + i + "']").attr("disabled", true);
答案 2 :(得分:0)
试试这段代码
$("select").change(function() {
//new code starts here
var section1 = false;
var section2 = false;
var indx = 0;
$("table tr").each(function(){
if(indx>=6 && indx<15){
if($(this).find('select').val()==0){
section1=true;
}
}
if(indx>=11 && indx<15){
if($(this).find('select').val()==0){
section2=true;
}
}
if(section1==true){
$("table tr").eq(5).find("select").attr('disabled','disabled');
}else{
$("table tr").eq(5).find("select").removeAttr('disabled');
}
if(section2==true){
$("table tr").eq(10).find("select").attr('disabled','disabled');
}else{
$("table tr").eq(10).find("select").removeAttr('disabled');
}
indx++;
});
//new code ends here
id = $(this).attr("row_id");
val = $(this).val();
alert("ID:" + id + " Value:" +val);
});