如果数组为空则禁用按钮,并在添加项目时启用?

时间:2018-07-30 15:22:46

标签: javascript jquery

我有一个数组,其中保存了一些复选框ID号,这些编号在用户单击表中的某些复选框时添加。如果数组为空,我想禁用按钮,并在有某些项目时启用它。

    var ids = [];

         $('#Table tbody').on('click', '.checkbox', function () {

             var idx = $.inArray($(this).attr("id"), ids);
             if (idx == -1) {
                 ids.push($(this).attr("id"));
             } else {
                 ids.splice(idx, 1);
             }
        });

监视数组并检查是否已将元素添加到id数组或调低为0以启用/禁用按钮的最佳方法是什么?

<input class="btn disabled" type="submit" name="submit" id="btnsubmit" value="Submitselected"/>

2 个答案:

答案 0 :(得分:1)

点击复选框后,您已经运行了该功能(也许change事件更适合您)-现在只需修改按钮上的disabled道具即可:

$("#btnsubmit").prop("disabled", ids.length === 0);

答案 1 :(得分:1)

我想在这里扩展@PeterRadar的答案,因为它实际上是一个很好的建议。基本上,这里的想法是将监视的数组包装在一个代理中,然后使用该代理来基本“订阅”更改。将该建议与this answer和@tymeJV结合使用,结果代码将类似于以下代码片段:

var array = [true];

    var updateButtonVisibility = function() {
           $("#test").prop("disabled", array.length === 0);
      }

$( document ).ready(function() {
          var arrayChangeHandler = {
           get: function(target, property) {
                updateButtonVisibility();
                console.log('getting property ', property);
                return target[property];
           },
           set: function(target, property, value, receiver) {
           target[property] = value;
           updateButtonVisibility();
           console.log('setting property ' + property + ' length is ' + array.length);
           return true;
           }
      }

      var wrappedArray = new Proxy(array, arrayChangeHandler )

      
       $("#add").click(function() {wrappedArray.push(true);});
      $("#subtract").click(function() {wrappedArray.pop();});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

  <body>

    <button id="test" type="submit">HELLO</button>
    <button id="add" type="submit">Add</button>
    <button id="subtract" type="submit">Subtract</button>
  </body>


为什么这样做?

以这种方式使用代理(wrappedArray对象)使您可以在每次使用其setter和getter写入对象或从中读取对象时运行自定义行为。在您的示例中,意味着禁用按钮的功能会在对象更改时运行,而不仅仅是单击另一个ui组件时。这意味着您对按钮的禁用/启用状态的实现未绑定到任何特定的UI组件。只要通过此wrappedArray使用访问权限,无论是什么原因导致设置/获取,您的禁用/启用状态都会按照您想要的方式进行更新。