Jquery - 如果满足条件,则禁用字段

时间:2016-03-01 08:51:50

标签: jquery forms select

我有一个有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();
 });

3 个答案:

答案 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;
      }
 });

Fiddle

此代码将从下到上遍历SELECT个元素。每当它找到非零条目时,它会将禁用的变量设置为true;在循环的其余部分,它永远不会再次获得false

遇到特殊行10和5(基于零的编号中的4和9)时,禁用值用于设置相应元素的disabled属性。 / p>

如果您决定使用另外5行扩展列表,并希望应用相同的原则来启用/禁用第15个SELECT元素,则不必更改上述代码。无论列表有多长,它都会为每五个SELECT元素完成工作。

答案 1 :(得分:0)

  

任何选择>第6行 - 第15行将禁用第5行

使用您已经设置的变量将其转换为代码:

  • 任意= if
  • 选择> 0 = val > 0
  • 第6-15行= id >= 6(因为有15行,无需明确检查)
  • 禁用第5行$("[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);

 });

fiddle link

相关问题