【问题标题】:remove disabled attribute of input tag within loop using jquery使用jquery删除循环内输入标签的禁用属性
【发布时间】:2018-12-20 09:38:03
【问题描述】:

我试图使用循环和输入的 id 作为查询选择器一一删除输入的禁用属性,但它没有按预期工作。我设法做到了没有循环,但是我必须为此编写 3 个不同的代码。请帮忙。谢谢。 编辑:keyup 事件将在下一个输入字段上切换禁用属性。例如,如果第一个输入不为空,则第二个输入字段的禁用属性将被删除。当第一个输入为空时,第二个输入将再次被禁用。这适用于第三和第四输入字段。

var inputs = $('input');
for (var i = 0; i < inputs.length; i++) {
 console.log('#'+inputs[i].id); //  print id1, id2, id3, id4
 console.log('#'+inputs[i+1].id); // print id2, id3, id4
 
   var x = '#'+inputs[i].id;
  var y = '#'+inputs[i+1].id;

$(x).keyup(function() {
    if ($(x).val() != '') {
      $(y).attr( "disabled", false );
    } else {
      $(y).attr("disabled", true);
    }
  })
  }
  
  // what I want my code to be like but in loops
  
  $("#id1").keyup(function() {
    if ($("#id1").val() != '') {
      $("#id2").attr( "disabled", false );
    } else {
      $("#id2").attr("disabled", true);
    }
  })

$("#id2").keyup(function() {
    if ($("#id2").val() != '') {
      $("#id3").attr( "disabled", false );
    } else {
      $("#id3").attr("disabled", true);
    }
  })

$("#id3").keyup(function() {
    if ($("#id3").val() != '') {
      $("#id4").attr( "disabled", false );
    } else {
      $("#id4").attr("disabled", true);
    }
  })
  
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="text" id="id1">
<input type="text" id="id2" disabled>
<input type="text" id="id3" disabled>
<input type="text" id="id4" disabled>

【问题讨论】:

  • keyup 事件如何在禁用元素上触发?
  • 你到底需要什么?当您单击输入输入内容时,或者当用户在上一个文本框中输入时需要逐个启用输入?
  • keyup 事件将切换下一个输入字段的禁用属性。例如,如果第一个输入不为空,则将删除第二个输入禁用属性。但如果它为空,则第二个输入字段将再次被禁用。这适用于后续输入。很抱歉一开始没有说清楚。

标签: javascript jquery html loops input


【解决方案1】:

这是您想要执行的操作吗?

$('input').keyup(function() {
  $(this).next('input').attr('disabled', false);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="text" id="id1">
<input type="text" id="id2" disabled>
<input type="text" id="id3" disabled>
<input type="text" id="id4" disabled>

如果是这样,您不需要使用 jQuery 进行循环。

【讨论】:

    【解决方案2】:

    我假设这就是您想要实现的目标?

    编辑

    与其他解决方案不同,此解决方案将自动切换所有输入字段的禁用属性,而不仅仅是触发keyup 事件的下一个内联属性。

    // Declare the inputs array.
    let inputs = [];
    
    
    // A function to check if an input field is empty or not. 
    const isEmpty = el => el.value.replace(/\ /) === '';
    
    
    // A function that iterates over the input array, disabling the relevant fields.
    const toggleDisabled = () => {
      let disableRemainder = false;
      inputs.forEach((el, j) => {
        const next = inputs[j + 1] || {};
        if (!disableRemainder) disableRemainder = isEmpty(el);
        next.disabled = disableRemainder;
      });
    };
    
    
    // A function to hanlde the on key up event. 
    const onKeyUpHandler = e => {
      const me = e.target;
      const index = me.id.replace(/\D/g, '');
      const value = me.value.replace(/\ /g, '');
      toggleDisabled();
    };
    
    
    // A function to initially add the event handler to the event on the 
    // inputs. 
    const dispatchEvents = () => inputs.forEach(el => el.onkeyup = onKeyUpHandler);
    
    
    // Run the above code when the DOM is ready. 
    $(document).ready(() => {
      inputs = document.querySelectorAll("input"); // Update the value. 
      dispatchEvents();
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <input type="text" id="id0">
    <input type="text" id="id1" disabled>
    <input type="text" id="id2" disabled>
    <input type="text" id="id3" disabled>

    【讨论】:

      【解决方案3】:

      您不能循环遍历未知数量的 ID。如果 ID 不是静态的并且您知道,那么给这些元素一个额外的类,如 class="mySpecialItem"。然后查询类而不是 ID 所以$(".mySpecialItem")。这将返回一个数组(因此是一个“列表”),您可以循环并为每个条目做一些事情:) 只是为了澄清:id 仅用于唯一选择和区分这一项。如果你想拥有一个“群”,那就使用class

      【讨论】:

        【解决方案4】:

        如果id唯一的,那么试试这个方法。

        if ($("#id3").val() != '') {
             $("#id3").prop('disabled', false);
            } else {     
            $("#id3").prop('disabled', true);
            }
        

        希望对你有所帮助..

        【讨论】:

        • “如果 id 是唯一的”是什么意思。 html 元素的 ID 字段始终是唯一的,因为 ID 的规范是唯一的。如果您多次使用 ID,则整个 HTML 无效,您应该通过阅读 ID 是什么以及如何使用它来解决您的问题。